0

C++ のクラスの別のメンバー関数でオーバーロードされた演算子を呼び出す方法は?

4

3 に答える 3

6

メンバーとしてオーバーロードされていると仮定すると、通常は を使用する(*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;
}

この単純化されたケースではおそらく役に立ちませんが、それでも一般的な考え方を示しています。

于 2012-11-20T08:37:04.650 に答える
1

あなたの質問は非常にあいまいですが、これらの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;
    }
}
于 2012-11-20T08:40:05.650 に答える
0

オーバーロードされたオペレーターは自動的に呼び出され、明示的な呼び出しは必要ありません。演算子のオーバーロードの簡単な例を次に示します。

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;
}
于 2012-11-20T08:54:12.200 に答える