[C++] 객체 포인터
Language/C++객체 포인터는 해당 객체의 주소값 뿐만 아니라 해당 클래스를 상속하는 Derived 클래스 객체의 주소값도 저장이 가능하다.
1 2 3 4 5 6 7 8 9 10 | int main() { Person* p1 = new Person; Person* p2 = new Student; p1->sleep(); p2->sleep(); return 0; } |
위의 예제는 Student가 Person을 상속하고 있을 때 객체 포인터 예제이다.
Person 과 Student는 is-a 관계에 의해서 Student는 Person이므로, Student 클래스의 객체는 Person 클래스의 객체이다.
따라서 Person 타입의 포인터로 Student 객체를 가리킬 수 있다.
1 2 3 4 5 6 7 8 9 10 | int main() { Person* p1 = new Person; Person* p2 = new Student; p1->sleep(); //p2->study(); // error return 0; } |
위의 예제에서는 Student 클래스에만 존재하는 study 함수를 호출하려하자 에러가 발생하였다.
객체 포인터 권한의 특성때문인데, 해당 클래스의 객체 포인터는 가리키는 대상이 어떤 객체이건, 해당 클래스 타입 내에 선언된 멤버와 해당 클래스가 상속한 클래스의 멤버에만 접근이 가능하다.
즉, p2 객체는 Person 타입의 포인터이므로, Person 클래스 내에 선언된 멤버에만 접근이 가능하다.
'Language > C++' 카테고리의 다른 글
[C++] virtual 키워드 (0) | 2015.12.24 |
---|---|
[C++] 오버라이딩 (Overriding) (0) | 2015.12.24 |
[C++] 상속의 조건. is-a 와 has-a (0) | 2015.12.19 |
[C++] 상속 (Inheritance) (0) | 2015.12.03 |
[C++] mutable 키워드 (0) | 2015.12.03 |