객체 레퍼런스  
 : 객체 레퍼런스란 객체를 참조 할 수 있는 레퍼런스로 클래스 포인터(객체 포인터)의 특성과 일치 한다. 
  1. #include <iostream>   
  2. using namespace std;   
  3.   
  4. class Person   
  5. {   
  6. public:   
  7.     void Sleep(){    
  8.         cout<<"Sleep"<<endl;   
  9.     }   
  10. };   
  11.   
  12. class Student : public Person   
  13. {   
  14. public:   
  15.     void Study(){   
  16.         cout<<"Study"<<endl;   
  17.     }   
  18. };   
  19.   
  20. class ScholarStd : public Student   
  21. {   
  22. public:   
  23.     void Receive_Scholar(){   
  24.         cout<<"Work"<<endl;   
  25.     }   
  26. };   
  27.   
  28. int main(void)   
  29. {   
  30.     ScholarStd p;   
  31.     Student& ref1=p;   
  32.     Person& ref2=p;   
  33.   
  34.     p.Sleep();   
  35.     ref1.Sleep();   
  36.     ref2.Sleep();   
  37.   
  38.     return 0;   
  39. }  

 앞서 배웠듯이 is-a 관계에서 어떤 클래스의 포인터는 자신 객체 뿐만 아니라, 자신을 상속하고 있는 클래스의 객체도 가리킬수가 있다. Person 클래스의 포인터를 가지고, 위의 코드에서의 세개 클래스 객체를 다 가리킬 수 있다. Person 클래스의 참조도 마찬가지로, 여기 세개의 클래스를 다 참조 할 수 있다. 저번에 포스팅했던 객체 포인터의 특성과 일치하는 것을 알 수 있다. 

 객체 레퍼런스 권한  
  1. #include <iostream>   
  2. using namespace std;   
  3.   
  4. class Person   
  5. {   
  6. public:   
  7.     void Sleep(){    
  8.         cout<<"Sleep"<<endl;   
  9.     }   
  10. };   
  11.   
  12. class Student : public Person   
  13. {   
  14. public:   
  15.     void Study(){   
  16.         cout<<"Study"<<endl;   
  17.     }   
  18. };   
  19.   
  20. class PartTimeStd : public Student   
  21. {   
  22. public:   
  23.     void Work(){   
  24.         cout<<"Work"<<endl;   
  25.     }   
  26. };   
  27.   
  28. int main(void)   
  29. {   
  30.     PartTimeStd p;   
  31.     p.Sleep();   
  32.     p.Study();   
  33.     p.Work();   
  34.   
  35.     Person& ref=p;   
  36.     ref.Sleep();   
  37. //  ref.Study(); // Error의 원인   
  38. //  ref.Work();  // Error의 원인   
  39.   
  40.     return 0;   
  41. }  

 객체의 레퍼런스 권한도 객체 포인터 권한과 마찬가지이다. 객체 포인터때도 지겹도록 반복해서 언급을 했지만, A클래스의 참조는 B객체도 C객체도 참조 할 수 있는데, 접근할 수 있는 영역은 A클래스내에 선언되어 있거나, A 클래스가 상속하고 있는 멤버로서 제한되어 진다. 

Posted by 모과이IT
,