객체인스턴스와 객체포인터로 함수 호출할떄 주의점
- 프로그래밍/C++
- 2011. 3. 28. 10:31
//공부:객체인스턴스와 객체포인터로 함수호출할떄 주의점!!!!!!(블로그에 정리함)
//
//ex)상속된 클래스가 있다고 가정해보자
class Person
{
public:
void Work() { };
};
class Student : public Person
{
public:
void Study() { };
};
//이게 있다고 가정해볼때,
Student Instance;
Instance.Work(); //당연히 가능!
Student* pInstance;
pInstance->Work(); //당연히 가능!
pInstance->Work(); //당연히 가능!
Person* pInstance2 = new Student;
pInstance2->Study(); //에러남! ( 부모 포인터로 자식클래스를 생성했기때문에 포인터 정적타입에 관한 멤버만 불러올 수 있다.)
Person& rInstace3 = Instance;
rInstace3.Study(); //에러남! (레퍼런스도 마찬가지!)
공부하다가 심심해서 실험해본 것!
상속받은 클래스에서 포인터나 레퍼런스를 쓸때는 이것을 주의하자!!!
부모 객체 포인터로 자식을 받을때는 정적타입에 영향을 받는다!! 항상 주의하자!!!
virtual을 쓰는 의미기도 하다!!
이말을 듣고도 모르겠으면 ,
예전 글을 참고하도록 ㅎㅎㅎ
[프로그래밍/C++] - 포인터의 정적타입, 동적타입
이 글을 공유하기