Как вызвать перегруженный оператор в другой функции-члене класса в C ++?
Предполагая, что он перегружен как участник, вы обычно используете (*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;
}
Вероятно, бесполезно в таком упрощенном случае, но все же показывает общую идею.
Ваш вопрос довольно двусмысленный, но один из этих трех ответчиков должен работать:
Всякий раз, когда вы хотите использовать 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;
}