-2

これはコードです: コードでわかるように、コンストラクターは戻り値の型として使用されますが、void でなくても何も返さないことを読みました。親切に説明してください。

#include<iostream>
using namespace std;
class complex_1
{
    float x,y;
public:
    complex_1() {}
    complex_1(float a) {x=y=a;}
    complex_1(float real, float imag )
    {x=real;y=imag;}
    complex_1 operator+(complex_1);
    void display(void);
};
complex_1 complex_1::operator+(complex_1 c)
{
    c.x= x + c.x;
    c.y= y + c.y;
    return c;
}
void complex_1::display(void)
{
    cout<<x<<" + "<<y<<"j"<<endl;
}
int main()
{
    complex_1 A(2.7, 3.5);
    complex_1 B(1.2);
    complex_1 C;
    //C=A.operator+(B);   // equivalent to C = A + B;
    C=A+B;
    cout<<"A =  ";
    A.display();
    cout<<"B =  "; 
    B.display();
    cout<<"C =  ";
    C.display();

    return 0;
}
4

4 に答える 4

1

これ:

complex_1 complex_1::operator+(complex_1 c)

type のオブジェクトを返すクラスcomplex_1メンバー関数 ( this を意味する) の定義です。complex_1::complex_1

cコンストラクターではなく、complex_1この関数で返される型のオブジェクトです。

于 2013-08-31T16:52:45.687 に答える
0

コンストラクターはインプレースで構築され、何も返す必要はありません。

コンストラクターは通常の関数のように呼び出されません

以下は何も返さない

complex_1 A(2.7, 3.5);
complex_1 B(1.2);
complex_1 C;
于 2013-08-31T16:56:08.047 に答える
0

それはあなたがコンジョイントで書いた operator+ return です。コンストラクターがそれとは関係がないことがわかったコンストラクターから省略します。

于 2013-08-31T17:17:55.800 に答える
0

関数はoperator+コンストラクターをまったく使用していません。渡されたパラメーターc(元のコピー) を変更してから、それを返します。コンパイラは、関数呼び出しを行う前にコピー コンストラクターを使用します。

于 2013-08-31T17:23:40.963 に答える