我试图了解运算符重载的概念,但无法理解在此程序中使用成员初始化列表。它们的实际用途是什么,我可以在没有它们的情况下重写这个程序吗?
#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;
答案 0 :(得分:3)
我认为存在某种混淆。您不是在谈论std::initialize_list,而是member initializer list。
是的,您可以在不使用它的情况下编写构造函数:
Complex(): real(0), imag(0){ }
成为:
Complex(): { real=0; image=0; }
但是我不推荐它。请参阅here why。
答案 1 :(得分:0)
在这种情况下,差异很小,但是当要初始化的成员是引用或声明const
时,它们变得非常重要。然后无法分配它们,并且必须被初始化。