3

乗算演算(*)がポインタでオーバーロードしているのか、またはその逆であるのか疑問に思いますか?

または、オペレーターは個人ですか?

C ++

4

2 に答える 2

14

これらは別個の演算子であり、どちらをオーバーロードするかは、演算子に渡すパラメーターによって異なります。

struct A
{
    //dereference operator
    A /*or whatever*/ operator *() { /*...*/ };
    //multiply operator           
    A operator *(const A&) { /*...*/ };
};

//...
A a;
*a; //calls dereference operator
a * a; //calls multiply operator
于 2012-06-11T07:05:39.553 に答える
5

+これは、単項演算子または二項演算子( 、-およびその他の演算子)を定義できるすべての演算子シンボルとまったく同じよう&に機能し、関数が取る引数の数によって異なります。したがって、単項演算*は、(以外のthis)引数をとらない非静的クラスメンバーとして、または単一の引数をとる自由関数として、単一の演算子をとるように定義する必要があります。二項演算子は、(に加えて)1つの引数をとる非静的クラスメンバーとしてthis、または2つの引数をとる自由関数として、2つの引数を取るように定義する必要があります。

関数の名前は同じであると見なされるため、バイナリバージョンでは単項関数を非表示にすることができ、その逆も可能であることに注意してください。

于 2012-06-11T07:32:36.437 に答える