类成员是另一个类的实例

fan*_*mas 0 c++

我想让一个类成员成为另一个类的实例.但我得到一个警告"警告C4458:声明'x'隐藏类成员"并且代码不起作用.

class Ca { int va = 5; public: Ca(); int getVa(void); }; int Ca::getVa(void) { return va; }; class Cb { Ca x; public: Cb(); int getCa(void); }; Cb::Cb(void) { Ca x; // instanciate Ca } int Cb::getCa(void) { return x.getVa(); } int main() { Cb cb; // instanciate Cb int i = cb.getCa(); cout << "va = " << i << endl; }
Run Code Online (Sandbox Code Playgroud)

我不明白这个警告,请有人解释一下吗?

das*_*ght 7

警告在这一行:

Cb::Cb(void) {
    Ca x;   // <<== Here
}
Run Code Online (Sandbox Code Playgroud)

问题是这Ca x是一个与成员变量无关的局部变量x.

如果您只需要调用默认构造函数进行初始化x,则无需执行任何操作:C++将自动为您执行此操作.如果您想将一些参数传递给Ca构造函数,请使用初始化列表:

Cb::Cb(int argForAsConstructor) : x(argForAsConstructor) {
    // Empty body
}
Run Code Online (Sandbox Code Playgroud)

冒号后的构造允许您初始化没有默认构造函数的成员变量.


K R*_*son 5

您在类 Cb 定义中声明 Ca x,然后在 Cb 构造函数中声明一个新变量,而不是使用已定义的变量。