gpt4 book ai didi

c++ - 初始化列表不检测公开继承的成员

转载 作者:行者123 更新时间:2023-11-30 05:30:21 25 4
gpt4 key购买 nike

小问题:我认为成员初始化列表的行为与使用“=”的正常初始化相同(只能使用初始化列表定义的 const 成员除外),调用具有特定的待初始化对象的构造函数我正在传递的参数,如我在下面的示例中所示(我在其中调用值为 1 的 x 的构造函数)。但令我惊讶的是,在简单继承的情况下,编译器提示没有看到我试图用我的构造函数初始化的成员,尽管看到另一个用通常的 '=' 语法初始化的成员:

#include <iostream> 
using namespace std;

class A
{
public:

int x;
int y;
};

class B : public A
{
public:

B() : x(1)
{
y = 2;
}
};

int main()
{
return 0;
}

如果你运行上面的代码,你会看到虽然 y 被检测到没有问题,但你的编译器会说在 'B() : x(1)' 行没有名为 'x' 的成员。这是为什么?继承是公开的,可以看到 y,没有问题,为什么 x 也不能?

最佳答案

您不能从类B 的初始化列表中初始化x,因为只有类A 可以初始化它的成员。

顺便说一句,公开数据成员不是一个好主意。以下是您的代码如何工作的示例:

#include <iostream> 
using namespace std;

class A
{
public:
A(int x, int y) : x(x), y(y) {}
protected:

int x;
int y;
};

class B : public A
{
public:

B() : A(1, 5000)
{
y = 2;
}
};

int main()
{
return 0;
}

关于c++ - 初始化列表不检测公开继承的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35998385/

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