Person * ptr; // 포인터 변수 선언
ptr = new Person(); // 포인터 변수의 객체 참조
class Student : public Person
{
...
}
Person * ptr = new Student(); // 이 문장도 가능하다.
// Student는 Person을 상속하므로, Person형 포인터 변수는 Student 객체를 가리킬 수 있음
#include <iostream>
using namespace std;
class Person
{
public:
void Sleep() { cout << "Sleep" << endl; }
};
class Student :public Person
{
public:
void Study() { cout << "Study" << endl; }
};
class PartTimeStudent :public Student
{
public:
void Work() { cout << "Work" << endl; }
};
int main()
{
Person* ptr1 = new Student(); // Person type의 객체 포인터 // super -> sub
Person* ptr2 = new PartTimeStudent(); // super -> sub
Student* ptr3 = new PartTimeStudent(); //Student type의 객체 포인터 // super -> sub
PartTimeStudent* ptr4 = new PartTimeStudent(); // super -> sub
//PartTimeStudent* ptr5 = new Student(); // sub -> super 불가능!!
printf("Person 타입의 객체 포인터\n-----------------------------------\n");
ptr1->Sleep();
//ptr1->Study(); type이 달라서 에러발생
ptr2->Sleep();
printf("\n\nStudent 타입의 객체 포인터\n-----------------------------------\n");
ptr3->Study();
ptr3->Sleep();
printf("\n\nPartTimeStudent 타입의 객체 포인터\n-----------------------------------\n");
ptr4->Sleep();
ptr4->Study();
ptr4->Work();
delete ptr1;delete ptr2;delete ptr3;
return 0;
}
Person* ptr1 = new Student();
- Student는 Person을 상속하므로, Person형 포인터 변수는 Student 객체를 가리킬 수 있다
Person* ptr2 = new PartTimeStudent();
- PartTimeStudent는 Person을 간접 상속하므로, Person형 포인터 변수는 PartTimeStudent 객체를 가리킬 수 있다
Student* ptr3 = new PartTimeStudent();
- PartTimeStudent는 Student를 상속하므로, Student형 포인터 변수는 PartTimeStudent 객체를 가리킬 수 있다
참고
포인터로 접근하려면 '->'사용
객체로 접근하려면 '.'사용