我写了这段代码:
class A {
public:
A(){d=2.2;cout<<d;}
A(double d):d(d){cout<<d;}
double getD(){return d;}
private:
double d;
};
class Bing {
public:
Bing(){a=A(5.3);}
void f(){cout<<a.getD();}
private:
A a;
};
int main() {
Bing b;
b.f();
}
Run Code Online (Sandbox Code Playgroud)
我得到输出:2.2 5.3 5.3而不是5.3 5.3.它是构造函数中的东西....为什么我得到这个?我该怎么办呢?
Jam*_*lis 10
你的类A有两个构造函数:一个默认的构造函数,它设置d为2.2,一个构造函数接受一个double,它设置d为你传递给构造函数的任何东西.
你有型的成员变量A在您的类Bing.在Bing输入构造函数的主体之前初始化此成员变量.由于未Bing在构造函数的初始值设定项列表中列出该成员,因此将调用其默认构造函数.您可以通过在初始化列表中初始化它来使用所需的值显式初始化它:
Bing() : a(5.3) { }
Run Code Online (Sandbox Code Playgroud)
那是因为你没有使用初始化列表.
你的Bing构造函数应该是这样的:
Bing() : a(5.3)
{
}
Run Code Online (Sandbox Code Playgroud)
在之前的代码中,您创建了一个新实例A(调用"默认构造函数"),然后将其影响到另一个类型的变量A(实际上调用了分配运算符).