Стандарт C++ 11 обеспечивает способ наследования конструкторов из базового класса. Мой вопрос касается более ранних стандартов. Предположим, что я наследую конструкторы следующим образом:Конструкторы Inhereting в C++
class Base {
public:
Base() {};
Base(int b) { a = ++b;}
virtual int foo() {return 0;}
int a;
};
class A : public virtual Base {
public:
A() {}
A(int b): Base(b) {}
int foo() {return a*a;}
};
class C : public A {
public:
C() {}
C(int b): A(b) {}
int foo() { return (a*a + a);}
};
Обратите внимание, что у меня есть виртуальное наследование класса Base. Теперь, когда я пытаюсь инициализировать указатель на объект типа C, вместо того, чтобы вызывать конструктор Base (b), код заканчивается вызовом конструктора Base(). Вот главная функция, которую я использовал:
int main(){
C *c = new C(5);
std::cout << c->Base::a << std::endl;
}
Выходное значение «а» равно 0. Однако, когда я удалить ключевое слово в то время как виртуальное наследование базового класса, то база (б) конструктор вызывается и Значение «а» равно 6. Может ли кто-нибудь помочь мне понять, что происходит? Почему это происходит при создании виртуального наследования по умолчанию?
Спасибо Juanchopanza. Да, эта тема действительно одна и та же. – SvSharma