gpt4 book ai didi

C++成员初始化VS继承构造函数初始化

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

我知道启动类成员的一种方法是编写以下内容:

class base {
int id;
public:
base(int id): id(id){}
};

但是,如果我将此语法与派生类的构造函数初始化混合使用会怎样:

class base {
int id;
public:
base(int id): id(id){}
};

class dri : public base {
int base;
public:
dri(int id): base(id){}
};

在上面的示例中,derived 类下的 base(id){} 指的是 int baseclass base ?我假设它指的是 int base 因为它没有编译。我怎样才能让它引用 class base

编辑:

第二个问题,假设你看一段随机的 C++ 代码,如下所示:

class base {
int id;
public:
base(int id): id(id){}
};

如何判断 id(id){} 是在初始化局部变量还是在初始化另一个类构造函数?

最佳答案

不要重复使用标识符 base是最简单的建议。

更复杂的是使用范围解析:

dri(int id): ::base(id){}
^
use base from the global namespace

发布问题编辑答案:

除非明确指定外部范围,否则最近定义的标识符使用将用于外部范围中的定义。如果不像编译器那样行事并构建一个定义了哪些标识符以及在哪里定义的图表并自己执行解析,就没有好的方法来判断您将获得哪个。

你遇到的和你遇到的完全一样

int string; 
string test;

当编译器到达 string test 时,string的含义已被程序员从类型更改为 int 类型的变量.除了不这样做之外,没有其他解决方案。

这让我们回到了开篇:不要在没有充分理由的情况下在包含的范围内重复使用标识符。有人会搞砸的。

关于C++成员初始化VS继承构造函数初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54540688/

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