如何在C ++中调用类的另一个成员函数中的重载运算符?
答案 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;
}