我知道,启动类成员的一种方法是编写如下:
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 base
或class 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
的变量。有这个其他无解比不这样做。
这把我们带回到开盘点:没有正当理由不重用涵盖范围标识符。有人会搞砸了。