gpt4 book ai didi

c++ - 虚拟公共(public)继承?需要帮助理解代码

转载 作者:行者123 更新时间:2023-11-28 03:14:54 25 4
gpt4 key购买 nike

我对虚拟继承有疑问。我很感兴趣为什么这段代码打印 1000(来自“二”类)而不是 3(来自“一”类)

代码如下:

#include <iostream>
using namespace std;

class A {
protected:
int number;
public:
A (int a=0) {number=a;}
};

class one:virtual public A {
public:
one (int a=3) {number=a;}
void print() {cout<<number<<endl;}
};

class two :virtual public A {
public:
two (int a=1000) {number =a;}
void print() { cout<<number<<endl; }
};

class B:public one,public two {
public:
void print() { cout<<number<<endl; }
};

int main () {
B A;
A.print();
}

最佳答案

基类按照声明的顺序初始化:一个然后是两个。虚拟继承意味着它们都共享同一个A实例,所以这里只有一个名为number的变量。

初始化 one 将 3 分配给 number 然后初始化 two 将 1000 分配给它。因此,在初始化整个对象后,它最终的值为 1000。

关于c++ - 虚拟公共(public)继承?需要帮助理解代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17220180/

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