C / C++,  Programming

[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에도 접근이 가능 한 것을 볼 수 있다.

Leave a Reply

Your email address will not be published. Required fields are marked *