c ++构造函数

aha*_*ron 3 c++ constructor

我写了这段代码:

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)


ere*_*eOn 5

那是因为你没有使用初始化列表.

你的Bing构造函数应该是这样的:

Bing() : a(5.3)
{
}
Run Code Online (Sandbox Code Playgroud)

在之前的代码中,您创建了一个新实例A(调用"默认构造函数"),然后将其影响到另一个类型的变量A(实际上调用了分配运算符).