gpt4 book ai didi

c++ - 继承共享内存

转载 作者:太空狗 更新时间:2023-10-29 20:52:38 25 4
gpt4 key购买 nike

我有一个我无法从逻辑上回答的问题。为什么我运行下面的代码后是这样的:

class foo1
{
private:
int age;
public:
foo1(int _age) :age(_age) {}
void print() { std::cout << age << std::endl; }
};

class foo2 :virtual public foo1
{
int grade;
public:
foo2(int _age, int _grade) :foo1(_age), grade(_grade) {}
};


class foo3 :virtual public foo2
{
private:
int score;
public:
foo3(int _age, int _grade, int _score) :
foo1(_age), foo2(5000, _grade), score(_score) {}
};

int main()
{
foo3 k(77,2,3);
k.print();
}

控制台输出是 77,而不是 5000。我认为 5000 是正确的输出(但我错了)的原因是,当我们为 foo3 的构造函数使用初始化列表时,会发生以下情况:

1) foo1 的构造函数将年龄设置为 77。

2) foo2 的构造函数将年龄设置为 5000,年级设置为 2,因为 foo2 使用了 foo1 的构造函数。

为什么foo2的构造函数不改变构造函数foo1设置的值

最佳答案

虚拟继承类的构造函数总是由最派生的类调用。在您的情况下,它是 foo3 。跳过 foo2 中 foo1 的构造函数调用。

关于c++ - 继承共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45623860/

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