목록게임프로그래밍/C++ (19)
bdfgdfg
다형성(Polymorphism) 객체지향 프로그래밍에서의 다형성은 간단히 말해 모습은 같은데 형태는 다른 것을 의미한다. 다형성을 뜻하는 영어 단어인 Polymorphism은 여러 개를 의미하는 'poly'와 모습 및 모양을 뜻하는 그리스어 'morphism'에서 온 단어로 여러 가지 형태라는 의미. C++에서의 다형성은 가상 함수(virtual, 함수, 연산자 오버 로딩, 템플릿 등이 있다. C++과 같은 객체지향 언어에서는 어떤 객체의 포인터 변수에서 자식(파생) 클래스 객체의 포인터 주소 값도 할당이 될 수 있다. 물론 그 반대도 가능하다. (다운 캐스팅, 업 캐스팅) 여기서 부모 클래스의 객체 타입(Type)에서 자식 클래스의 객체가 할당되어있다면 virtual 키워드(가상 함수)를 이용해 부모 ..
캡슐화 및 은닉성 - 캡슐화는 간단히 말해 관련된 데이터와 함수를 묶는 것. - 실제 구현 내용을 외부에 감추어 은닉한다. 절차 지향 언어인 C에서는 이것이 불가능한데 C에서의 구조체는 단순히 관련된 데이터들을 묶어주는 데이터 덩어리. 그렇기에 특정 함수와 관련된 데이터를 추적하기가 어렵다. 객체지향 언어에서는 이러한 캡슐화가 지원되는데 관련된 데이터와 함수들을 클래스 안에서 사용이 가능해짐에 따라 클래스라는 캡슐 속에서 기능들을 캡슐화하는 게 가능해진 것. 리모컨을 생각해보자. 우리는 간단하게 TV를 향해 리모컨을 들고 채널을 바꾸거나 소리를 높이고 낮출 수 있다. 리모컨 내부를 몰라도(은닉) 우리는 버튼 하나만 누르면(캡슐화) 원하는 대로 리모컨의 기능을 사용할 수 있는 것이다. -> 리모컨의 동작원..
객체지향 프로그래밍 언어에서는 상속이라는 키워드가 존재하는데 이름 그대로 부모 클래스의 멤버 함수와 멤버 변수를 그대로 물려받는것을 의미 한다. -> 이 떄 물려받은 클래스를 자식 클래스 혹은 파생 클래스라 한다. 장점은 공통되는 특징(멤버들)들을 다시 작성할 필요없이 필요한 기능이 담긴 클래스를 상속받으면 된다. -> 코드의 재사용성 UP 사용하는 방법은 간단하다 class 클래스 이름 : 접근지정자 부모 클래스명 { //내용. }; 즉 Human이라는 클래스가 존재하고, Student라는 클래스가 존재한다고 보자. 상속을 정하는 기준에서 유명한 방법인 IS-A, Has-A 방법이 있다. A와 B클래스가 있고 상속관계를 정하려고 해본다. IS-A : B는 ~A이다. (상속 관계) Has-A : B는 A..
디폴트 기본 복사 생성자 및 복사 대입 연산자를 사용할시에 얕은 복사로 복사가 이루어짐. 깊은 복사와 얕은 복사라는 말이 나온 이유는 클래스의 복사 생성,대입 연산자의 호출에 있어서 메모리 관점에 대한 주의. 간단하게 말하면 얕은 복사는 디폴트 복사 생성자,대입 연사자를 호출하여 복사 대상의 멤버를 복사할 객체의 멤버로 그대로 복사하는 것. 깊은 복사는 사용자가 복사 생성자,대입 연산자를 직접 정의하여 포인터 변수가 가르키는 메모리는 복사하지 않고 새로운 인스턴스를 만들어 복사하는 방식. 참고로 복사 생성자 및 복사 대입 연산자의 호출방식은 - 생성시기 때 같은 타입을 인자로 넣어준다면 복사 생성자를, - 생성시기 때 같은 타입을 대입 연산한다면 복사 생성자를, - 그 이후 일반 상황에서 대입 연산한다면..