객체인스턴스와 객체포인터로 함수 호출할떄 주의점


//공부:객체인스턴스와 객체포인터로 함수호출할떄 주의점!!!!!!(블로그에 정리함)
//
//ex)상속된 클래스가 있다고 가정해보자
 

class Person
{
public:
void Work() { };
};

class Student : public Person
{
public:
void Study() { };
};

//이게 있다고 가정해볼때,

Student Instance; 
Instance.Work();         //당연히 가능!

Student* pInstance;
 
pInstance->Work(); //당연히 가능!

Person* pInstance2 = new Student;
pInstance2->Study(); //에러남! ( 부모 포인터로 자식클래스를 생성했기때문에 포인터 정적타입에 관한 멤버만 불러올 수 있다.)

Person& rInstace3 = Instance;
rInstace3.Study(); //에러남! (레퍼런스도 마찬가지!)




공부하다가 심심해서 실험해본 것!

상속받은 클래스에서 포인터나 레퍼런스를 쓸때는 이것을 주의하자!!!
부모 객체 포인터로 자식을 받을때는 정적타입에 영향을 받는다!! 항상 주의하자!!!
virtual을 쓰는 의미기도 하다!!

이말을 듣고도 모르겠으면 ,
예전 글을 참고하도록 ㅎㅎㅎ
[프로그래밍/C++] - 포인터의 정적타입, 동적타입




 

이 글을 공유하기

댓글

Designed by JB FACTORY