객체 포인터

-> 객체 포인터 변수에 본인 또는 본인을 상속 받는 객체의 주소를 저장할 수 있다.

-> 반대의 경우는 불가능하다.

class CObj
{
public:
	void CObj_Func()
	{

	}
};
class CPlayer : public CObj
{
public:
	void CPlayer_Func()
	{

	}
};
CPlayer* pObj1 = new CObj; // 불가능

 

단, 객체의 멤버에 접근할 때는 객체 타입 기본으로 판단한다.

객체 타입         
 CObj*		pObj = new CObj;
 CObj*		pPlayer = new CPlayer;

 

pPlayer의 실 객체는 CPlayer 이지만
객체 타입이 CObj이기 때문에 CObj가 가지고 있는 함수만 호출이 가능하다.

pPlayer->CObj_Func();
pPlayer->CPlayer_Func();		// 불가능

 

하지만 객체 타입이 CPlayer 이면 자식 클래스이기 때문에 부모 클래스에 있는 함수까지 호출이 가능하다.

CPlayer	  player;
player.CObj_Func();
player.CPlayer_Func();

 

객체 타입을 자식클래스로 하면 부모 클래스로 동적 할당이 불가능하다.

자식 -> 부모는 참조가 가능하지만 부모 -> 자식은 불가능.

하지만 부모 클래스가 자식 클래스를 참조하는 방법이 있다.

 

가상 함수를 이용하는 것이다.(virtual)

'Programming > C++ Basic' 카테고리의 다른 글

C++ 가상 함수(virtual), 가상 소멸자, 순수 가상 함수  (0) 2020.09.18
C++ 오버라이딩  (0) 2020.09.18
C++ 상속성  (0) 2020.09.17
C++ friend  (0) 2020.09.17
C++ this 포인터, extern 키워드  (0) 2020.09.16

+ Recent posts