[C/C++] Parent Class에서 Child Class의 Variable or Function 접근
C++에선 상속의 개념이 존재하는데, parent class의 특성을 상속받아서 사용하는 방식이 제공된다. 이 때 상속을 받은 child class에선 parent class 변수 또는 함수에 접근이 바로 가능한데, 반대로 parent class에서 child class로의 접근을 하기 위해선 몇 가지 해결책이 필요하다.
Parent class에서 child class로 접근을 허용하기 위해서 child class의 type과 주소값을 parent class로 constructor가 수행 될 때 알려주는 것이다. 예제 코드는 다음과 같다.
#include <iostream> using namespace std; template <typename T> class Person { public: Person(void){} Person(T *_child) { child = dynamic_cast<T *>(_child); } void printVal(void) { cout << "Age: " << child->getAge() << endl; cout << "ID: " << child->getId() << endl; } private: T *child; }; class Child: public Person<Child> { public: Child(int _age, int _id): Person<Child>(this), age(_age), id(_id) { } int getAge() { return age; } int getId() { return id; } private: int age; int id; }; int main() { Child cd (20, 123456); cd.printVal(); return 0; }
Age: 20 ID: 123456
위 결과를 보면 child class의 private member variable에도 접근이 가능 한 것을 볼 수 있다.