1
class Cents
{
private:
int m_nCents;

public:
Cents(int nCents) { m_nCents = nCents; }

// Overload cCents + int
friend Cents operator+(const Cents &cCents, int nCents);
int GetCents() { return m_nCents; }
};

// note: this function is not a member function!
Cents operator+(const Cents &cCents, int nCents)
{
return Cents(cCents.m_nCents + nCents);
}

int main()
{
Cents c1 = Cents(4) + 6;
std::cout << "I have " << c1.GetCents() << " cents." << std::endl;

return 0;
}

表現の仕方がよくわからない

Cents(4)+6 

列をなして

Cents c1 = Cents(4) + 6;

評価されます。ええ、Cents 型と int 型のオペランドに対してそれぞれ演算子「+」をオーバーロードしていることはわかっています。

私が理解しているように、 Censt(4) はコンストラクターですよね?そうするとき

Cents operator+(const Cents &cCents, int nCents)
 {
 return Cents(cCents.m_nCents + nCents);
 }

cCenst は Cents(4) への参照になりますか?

ラインから

return Cents(cCents.m_nCents + nCents);

メンバー選択演算子 "." を介して m_nCents にアクセスするため、cCenst は Censt 型のオブジェクトであると推測できます。ただし、Censt(4) はコンストラクターであり、クラス オブジェクトではありません。

私には、cCenst が Cents(4) への参照であることは意味がないように思えます。それらは同等ではないからです。

4

3 に答える 3

3

私が理解しているように、 Censt(4) はコンストラクターですよね?

いいえ、そうではありません。この構文ではコンストラクターを直接呼び出しているように見えますが、コンストラクターを直接呼び出すことはありません

ここではCenst、コンストラクター引数を使用して一時的な型を構築しています4

次のように考えてください。

Censt x(4);  // creates a `Censt` with name `x` from argument `4`
Censt(4);    // creates a `Censt` with no name from argument `4`

関数呼び出しではありません。

cCenst は Cents(4) への参照になりますか?

はい。

ただし、Censt(4) はコンストラクターであり、クラス オブジェクトではありません。

繰り返しますが、いいえ。オブジェです。

于 2015-02-07T18:31:04.753 に答える