如何将重载运算符应用于此
How to apply overloaded operator to this?
如何在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;
}
相关文章:
- c++r值引用应用于函数指针
- 如何将记忆应用于此递归函数?
- atoi() 在应用于大型命令行参数时会产生不正确的值
- 运算符'<'不能应用于类型 'string' 和 'string' 的操作数
- 应用于运算符而不是构造函数的显式关键字
- 应用于无符号类型的一元减号运算符
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 这些重载运算符如何应用于表达式 d***b?
- [expr.unary.op]/9 似乎暗示"运算符!()' 不能应用于下面的类型 A.但编译器不同意这一点
- 如何将比较运算符应用于两个匿名结构中的每个变量
- 将运算符重写应用于具有动态分配指针的类
- 二元运算符"<<"不能应用于类型 "wostream" 和 "string" 的表达式
- 错误 一元减号运算符应用于无符号类型会导致无符号
- 将或(||)运算符应用于只有0和1的两个向量
- MSVS 2015 显式错误 C4146 - 应用于无符号类型的一元减号运算符
- 如何将 decltype 应用于运算符 [] 声明中的成员函数
- 错误 C4146:一元减号运算符应用于无符号类型,结果仍然无符号
- 三元运算符将类扩展宏应用于这两个操作数
- 将增量运算符应用于函数
- 将逐位移位运算符应用于有符号类型:UB和Impl.定义