유도된 클래스들의 생성순서
Derived
기본지식
접근지정자
private 은 자식도 사용못한다.
protected는 자식은 사용가능하다.
:initalizer list는 안된다. 이유는?
클래스가 생성되는 순서를 알아야한다.
자식클래스를 객체생성하면 부모클래스가 먼저 생성되는것을 확인할 수 있다.
debug를 해보게되면
부모객체,자식객체변수를 쓰레기값으로 생성되고
부모객체부터 초기화하고 자식객체의 변수들을 초기화되는걸 볼 수 있다.
자식클래스는 부모클래스에 있는걸 다 사용할 수 있기에
부모클래스부터 정의해서 사용할 수 있게한다.
부모클래스의 constructor를 항상 먼저 실행시킨다.
다중상속을 하여도 맨위의 부모클래스부터 연쇄적으로초기화한다.
소멸자 Destructor는 반대로 소멸된다. 자식부터 소멸된다.
아래코드의 생성 순서를 보자(주석으로 써놓았다.)
1.객체생성한다.
2. 자식클래스 생성자로 온다.
3.부모클래스 생성자를 실행한다.
4.자식클래스의 생성자를 초기화한다.
#include <iostream>
using namespace std;
class Mother
{
public:
int m_i;
//3.부모클래스 생성자를 실행한다.
Mother() :m_i(1){
cout << "Mother Constructor" << endl;
}
~Mother() {
cout << "Mother Destructor" << endl;
}
Mother(const int &a) :m_i(a) {
cout << "Mother Constructor" << endl;
}
};
class Child : public Mother
{
public:
double m_d;
//2. 자식클래스 생성자로 온다.
Child()
: //내부적으로 숨어있다.Mother(),
//4.자식클래스의 생성자를 초기화한다.
m_d(1.0){
cout << "Child Constructor" << endl;
}
~Child() {
cout << "Child Destructor" << endl;
}
};
class A : public Child
{
public:
A() {
cout << "A" << endl;
}
~A() {
cout << "A Destructor" << endl;
}
};
int main()
{
//1.객체생성
Child c1;
return 0;
}
'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글
c++ 상속과 접근지정자 (0) | 2019.08.30 |
---|---|
c++ 상속 유도된 클래스들의 생성과 초기화 (0) | 2019.08.30 |
c++ 상속의 기본2(기본구현) (0) | 2019.08.29 |
c++ 상속의 기본1 (0) | 2019.08.29 |
c++ container classes 컨테이너클래스 (0) | 2019.08.28 |