17.3 Order of construction of derived classes
https://www.learncpp.com/cpp-tutorial/order-of-construction-of-derived-classes/
우리는 전 레슨에서 inheritance의 basic에 대해서 살펴보았다
클래스가 다른 클래스로부터 멤버 변수와 함수를 상속받을 수 있다는 것을 알 수 있었다
이번 섹션에서는 derived class가 instantiate될 때 construction의 순서에 대해서 알아본다
#include <iostream>
class Base
{
public:
int m_id {};
Base(int id=0)
: m_id(id)
{
std::cout << "Base\n";
}
int getId() const { return m_id; }
};
class Derived: public Base
{
public:
double m_cost {};
Derived(double cost=0.0)
: m_cost(cost)
{
std::cout << "Derived\n";
}
double getCost() const { return m_cost; }
};
int main()
{
std::cout << "Instantiating Base\n";
Base base;
std::cout << "Instantiating Derived\n";
Derived derived;
return 0;
}
Base를 public 상속받는 Derived가 instantiate되면 Base의 constructor가 먼저 호출되고 Derived의 constructor가 다음으로 호출된다
이는 논리적으로 맞는 순서 같다
그리고 상식적으로 안정적으로 생각되어진다
왜냐하면 child class는 parent class의 멤버 변수나 멤버 함수를 사용할 수도 있기 때문에
Base가 먼저 instantiate 되어야 한다고 이해할 수도 있겠다
반면에 parent class는 child class에 대해서 일절 정보를 알 수가 없다.
Order of construction for inheritance chains
class A
{
public:
A()
{
std::cout << "A\n";
}
};
class B: public A
{
public:
B()
{
std::cout << "B\n";
}
};
class C: public B
{
public:
C()
{
std::cout << "C\n";
}
};
class D: public C
{
public:
D()
{
std::cout << "D\n";
}
};
위의 경우에는 A->B->C->D 순으로 파생되었다
따라서 D를 instantiate 하면 A, B, C, D 순으로 constructor가 실행된다
C++는 항상 first, 혹은 most base 클래스를 가장 먼저 생성한다
Author And Source
이 문제에 관하여(17.3 Order of construction of derived classes), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ikmy0ung/17.3-Order-of-construction-of-derived-classes저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)