0

演算子のオーバーロードの概念を理解しようとしましたが、このプログラムでのメンバー初期化子リストの使用を理解できません。それらの実際の用途は何ですか?それらなしでこのプログラムを書き直すことができますか?

#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;
4

2 に答える 2

3

なんらかの混乱があると思います。std::initialize_listについて話しているのではなく、メンバー初期化子リストについて話しているのです。

はい、コンストラクターを使用せずに作成できます。

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

になります:

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

ただし、お勧めしません。理由はこちらをご覧ください。

于 2015-07-02T11:20:41.163 に答える
0

この場合の違いは小さいですが、初期化されるメンバーが参照または宣言されている場合は非常に重要になりますconst。その場合、それらは割り当てることができず、初期化する必要があります。

于 2015-07-02T14:32:09.310 に答える