c/c++] 객체포인터와 객체레퍼런스
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
class Person{
private:
int age;
public:
Person(int _age=0){
age=_age;
cout<<_age<<"살의 인간이 생성되었습니다"<<endl;
}
void Breath();
};
void Person::Breath(){ cout<<"숨을쉽니다"<<endl; }
class Student : public Person{
public:
Student(int _age=0) : Person(_age){
cout<<"학생이 생성되었습니다"<<endl;
}
void StudyHard();
};
void Student::StudyHard(){ cout<<"열심히 공부를 합니다"<<endl; }
class EleteStudent : public Student{
public:
EleteStudent(){
cout<<"엘리트가 되었습니다"<<endl;
}
void GoSeoulUniv();
};
void EleteStudent::GoSeoulUniv(){ cout<<"서울대에 갔습니다"<<endl; }
int main(void){
//////////객체포인터//////////////
Person* p[3];
p[0]= new Person();
p[1]= new Student(20);
p[2]= new EleteStudent();
p[0]->Breath();//객체포인터Person*로 Person을 상속받은 하위자식들을 생성할경우
p[1]->Breath();//매서드 접근권한이 딱 Person이 갖는 Breath까지만 주어진다.
p[2]->Breath();//이것을 해결하기위해 객체 reference를 사용한다.
//////////객체참조(Object Reference)//////////////////////
EleteStudent e; //상속의상속의 결과물
Student& refStudent= e;//엘리트의 학생레퍼런스를 생성
Person& refPerson= e;//엘리트의 사람레퍼런스를 생성
e.GoSeoulUniv(); //원래 다상속받은 객체라서 다 접근 가능
refStudent.StudyHard(); //base의 breath 매서드와 자기자신의 studyHard까지 접근 가능
refPerson.Breath();// base가 없으므로 자기자신의 breath 메서드까지 접근 가능
return 0;
}