C ++构件初始化VS继承的构造初始化

问题描述 投票:0回答:1

我知道,启动类成员的一种方法是编写如下:

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

但如果我混这个语法与constructor initialization of a derived class

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){}正在初始化一个局部变量或初始化另一个类的构造函数?

c++ inheritance
1个回答
1
投票

不要再使用该标识base是最简单的建议。

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

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

Post question edit answer:

最近定义使用的标识符将通过在外部范围定义来使用,除非显式指定的外部范围。有没有什么好办法来告诉它你会得到不像个编译器和建筑标识定义了什么一个图,其中并执行自己的决议。

什么是你对运行起来完全一样

int string; 
string test; 

由编译器到达string test时,string的含义已经改变由程序员从类型到类型int的变量。有这个其他无解比不这样做。

这把我们带回到开盘点:没有正当理由不重用涵盖范围标识符。有人会搞砸了。

© www.soinside.com 2019 - 2024. All rights reserved.