【问题标题】:Could someone explain this inheritance code?有人可以解释这个继承代码吗?
【发布时间】:2016-12-29 13:03:58
【问题描述】:
#include <iostream>
using namespace std;

struct A {
    A() { cout << "A "; } 
};

struct B: A {
    B() { cout << "B "; }  
};

struct C: A {
    C() { cout << "C "; } 
};

struct D: C, B {
    D() { cout << "D "; }    
};

int main(){
    D d;
}

结果是 A C A B D。 我的理解是D继承自C和B,如果在D中创建了一个对象“d”,那么它也具有C和B的属性。由于B和C都继承自A,D也应该继承自A . 有人可以解释一下结果吗?我的预测很差……

【问题讨论】:

  • 嗨。欢迎来到 SO。您应该为编程语言添加一个标签,以便向该语言专家的人显示问题。 :)
  • 嗨!谢谢你的提示!我还是新手 ^^
  • @codenoob 欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。

标签: c++ oop inheritance


【解决方案1】:

首先调用基本构造函数,然后调用主构造函数。

    D()
=>  C()    then  B()    then D
=>  A() C  then  A() B  then D
=>  A C    then  A B    then D
=>  A C A B D

Order of execution in constructor initialization list

【讨论】:

  • 感谢您的帮助!
【解决方案2】:

继承反映了一种 IS A 关系。

A D 对象是 C 和 B。A C 又是 A。因此,要创建 D 的实例,运行时必须先创建 A,然后再创建 C。这就解释了输出的前两个字符.继续这个推理,你会得到剩下的。

【讨论】:

  • 感谢您的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2020-02-04
相关资源
最近更新 更多