다음 코드에서 유형의 개체를 인스턴스화 할 때 daughter
기본 grandmother()
생성자가 호출되는 이유를 이해할 수 없습니다 .
클래스 생성자 grandmother(int)
의 사양을 따르기 위해 생성자가 호출되어야 mother
하거나 가상 상속 때문에이 코드가 전혀 컴파일되지 않아야한다고 생각했습니다.
여기서 컴파일러 grandmother
는 내 뒤에 기본 생성자를 자동으로 호출 하지만 요청한 적이 없습니다.
#include <iostream>
class grandmother {
public:
grandmother() {
std::cout << "grandmother (default)" << std::endl;
}
grandmother(int attr) {
std::cout << "grandmother: " << attr << std::endl;
}
};
class mother: virtual public grandmother {
public:
mother(int attr) : grandmother(attr) {
std::cout << "mother: " << attr << std::endl;
}
};
class daughter: virtual public mother {
public:
daughter(int attr) : mother(attr) {
std::cout << "daughter: " << attr << std::endl;
}
};
int main() {
daughter x(0);
}