C++ のクラスの別のメンバー関数でオーバーロードされた演算子を呼び出す方法は?
3 に答える
メンバーとしてオーバーロードされていると仮定すると、通常は を使用する(*this)operator<parameter(s)>
ため、クラスにoperator[]
int パラメーター (例: T &operator[](int index);
) を取る のオーバーロードがある場合、別のメンバー関数が でそれを呼び出すことができ(*this)[2]
ます。
無料の関数としてオーバーロードされている場合は、ほとんど同じ種類のことを行います。たとえば、次のような無料の関数があるとします。
my_string operator+(my_string const &a, my_string const &b);
次のようなメンバー関数から呼び出すことができます。
my_string operator+(my_string const &other) {
return (*this) + other;
}
この単純化されたケースではおそらく役に立ちませんが、それでも一般的な考え方を示しています。
あなたの質問は非常にあいまいですが、これらの3つのサブアンサーのいずれかが機能するはずです:
this
(非静的)メンバー関数内で使用したいときはいつでも、それを行うことができます:
class A {
int b;
void foo() {
this->b;
}
void bar() {
foo(); // Those calls are the same
this->foo();
this->b;
}
}
C++ はthis
、同じオブジェクトであることを考慮します。
のようなオーバーロードされた演算子を呼び出したいoperator+=
場合は、次のようにします。
void foo()
{
*this += bar;
(*this)[bar]; // for operator[]
}
そして、親クラスの演算子を呼び出す必要がある場合:
class A, public Base {
void foo()
{
this->Base::operator+= bar; // Equivalent syntax again
((Base)*this) += bar;
}
}
オーバーロードされたオペレーターは自動的に呼び出され、明示的な呼び出しは必要ありません。演算子のオーバーロードの簡単な例を次に示します。
class MyNumber
{
private:
int number_;
public:
MyNumber() : number_(0) { }
MyNumber& operator++() // prefix
{
++number_;
return *this;
}
MyNumber operator++(int) // postfix
{
MyNumber result = *this;
++number_; // Calls this->operator++(void);
return result;
}
};
int main(void)
{
MyNumber number;
number++;
++number;
return 0;
}