乗算演算(*)がポインタでオーバーロードしているのか、またはその逆であるのか疑問に思いますか?
または、オペレーターは個人ですか?
C ++
乗算演算(*)がポインタでオーバーロードしているのか、またはその逆であるのか疑問に思いますか?
または、オペレーターは個人ですか?
C ++
これらは別個の演算子であり、どちらをオーバーロードするかは、演算子に渡すパラメーターによって異なります。
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
+
これは、単項演算子または二項演算子( 、-
およびその他の演算子)を定義できるすべての演算子シンボルとまったく同じよう&
に機能し、関数が取る引数の数によって異なります。したがって、単項演算*
は、(以外のthis
)引数をとらない非静的クラスメンバーとして、または単一の引数をとる自由関数として、単一の演算子をとるように定義する必要があります。二項演算子は、(に加えて)1つの引数をとる非静的クラスメンバーとしてthis
、または2つの引数をとる自由関数として、2つの引数を取るように定義する必要があります。
関数の名前は同じであると見なされるため、バイナリバージョンでは単項関数を非表示にすることができ、その逆も可能であることに注意してください。