Я пытался понять концепцию перегрузки операторов, но не могу понять использование списков инициализаторов членов в этой программе. Каково их реальное использование, и могу ли я переписать эту программу без них?
#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;
Я думаю, что есть какая-то путаница. Вы не говорите о станд :: initialize_list скорее список инициализаторов членов.
Да, вы можете написать свой конструктор, не используя его:
Complex(): real(0), imag(0){ }
становится:
Complex(): { real=0; image=0; }
Однако я не рекомендовал бы это. Увидеть вот почему.
В этом случае разница невелика, но становится очень значительной, когда инициализируемые элементы являются ссылками или объявлены const
, Тогда они не могут быть назначены, и должен быть инициализирован.