Как применить перегруженный оператор к этому?

Как вызвать перегруженный оператор в другой функции-члене класса в C ++?

0

Решение

Предполагая, что он перегружен как участник, вы обычно используете (*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;
}

Вероятно, бесполезно в таком упрощенном случае, но все же показывает общую идею.

6

Другие решения

Ваш вопрос довольно двусмысленный, но один из этих трех ответчиков должен работать:

Всякий раз, когда вы хотите использовать 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;
}
}
1

Перегруженный оператор будет вызываться автоматически, и нет необходимости в явном вызове. Вот краткий пример перегрузки операторов:

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;
}
0
По вопросам рекламы [email protected]