gpt4 book ai didi

c++ - 菱形多重继承模式

转载 作者:搜寻专家 更新时间:2023-10-31 00:18:55 26 4
gpt4 key购买 nike

下面是多重继承中面临的一个菱形问题,

class Base {
public:
Base() {
cout << "Empty Base constructor " << endl;
}
Base(const string & strVar) {
m_strVar = strVar;
cout << m_strVar << endl;
}
virtual ~Base() {
cout << "Empty Base destructor " << endl;
}
virtual const string & strVar() const {
return m_strVar;
}

string m_strVar;
};

class Derived1: public virtual Base {
public:
Derived1() {
cout << "Empty Derived1 constructor " << endl;
}
Derived1(const string & strVar) : Base(strVar) {
cout << " Derived1 one arg constructor" << endl;
}
~Derived1() {
cout << "Empty Derived1 destructor " << endl;
}
};

class Derived2: public virtual Base {
public:
Derived2() {
cout << "Empty Derived2 constructor " << endl;
}
Derived2(const string & strVar) : Base(strVar) {
cout << "Derived2 one arg constructor" << endl;
}
~Derived2() {
cout << "Empty Derived2 destructor " << endl;
}
};

class Derived: public Derived1, public Derived2 {
public:
Derived(const string & strVar) : Derived1(strVar), Derived2(strVar) {
cout << "Derived Constructor " << endl;
}
~Derived() {
cout << "Empty Derived destructor " << endl;
}
};

int main() {
Derived derObj ("Print this if you can ! ");
}

我得到的输出是

  1. 空基础构造函数
  2. Derived2 一个 arg 构造函数
  3. Derived1 一个 arg 构造函数
  4. 派生构造函数
  5. 空派生析构函数
  6. 空的 Derived2 析构函数
  7. 空的 Derived1 析构函数
  8. 空基析构函数

我想知道为什么我的 derObj 参数,即“如果可以,打印这个”没有打印出来,输出也不像

  1. 空基础构造函数
  2. Derived2 一个 arg 构造函数
  3. 如果可以,请打印出来!
  4. Derived1 一个 arg 构造函数
  5. 派生构造函数
  6. 空派生析构函数
  7. 空的 Derived2 析构函数
  8. 空的 Derived1 析构函数
  9. 空基析构函数

最佳答案

这与虚拟继承有关。

当类被虚拟继承时,层次结构中派生程度最高的类负责调用其构造函数:此处为Derived

由于 Base 是默认可构造的,而您没有精确说明任何内容,Derived 调用 Base 的默认构造函数。

如果要打印字符串,请使用:

Derived(const string & strVar) : Base(strVar), Derived1(strVar), Derived2(strVar)
{
std::cout << "Derived Constructor\n";
}

您可以删除默认构造函数,让编译器诊断问题,但并非所有编译器都会提供非常有用的消息。

关于c++ - 菱形多重继承模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9308432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com