如何将重载运算符应用于此?

时间:2012-11-20 08:31:36

标签: c++ operator-overloading this-pointer

如何在C ++中调用类的另一个成员函数中的重载运算符?

3 个答案:

答案 0 :(得分: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;
}

可能在这种简单的案例中没用,但仍然显示了一般的想法。

答案 1 :(得分:1)

你的问题很模糊,但这三个子通道中的一个应该有效:

每当你想在任何(非静态)成员函数中使用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;
    }
}

答案 2 :(得分: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;
}