构造函数中成员初始值设定项列表的用途是什么

What is the use of member initializers list in constructors?

本文关键字:列表 是什么 成员 构造函数      更新时间:2023-10-16

我试图理解运算符重载的概念,但无法理解该程序中成员初始值设定项列表的使用。它们的真正用途是什么?没有它们我能重写这个程序吗?

#include <iostream>
using namespace std;
class Complex
{
    private:
  float real;
  float imag;
    public:
   Complex(): real(0), imag(0){ }
   void input()
   {
       cout<<"Enter real and imaginary parts respectively: ";
       cin>>real;
       cin>>imag;
   }
   Complex operator - (Complex c2)    /* Operator Function */
   {
       Complex temp;
       temp.real=real-c2.real;
       temp.imag=imag-c2.imag;
       return temp;
   }
   void output()
   {
       if(imag<0)
           cout<<"Output Complex number: "<<real<<imag<<"i";
       else
           cout<<"Output Complex number: "<<real<<"+"<<imag<<"i";
   }
};
int main()
{
Complex c1, c2, result;
cout<<"Enter first complex number:n";
c1.input();
cout<<"Enter second complex number:n";
c2.input();
result=c1-c2; 
result.output();
return 0;

我认为存在某种混淆。您所说的不是std::initialize_list,而是成员初始值设定项列表。

是的,你可以在不使用它的情况下编写你的构造函数:

Complex(): real(0), imag(0){ }

变为:

Complex(): { real=0; image=0; }

但是我不推荐它。请看这里的原因。

在这种情况下,差异很小,但当要初始化的成员是引用或声明的const时,差异会变得非常显著。然后,它们不能被分配,并且必须被初始化。