我知道,C ++有运算符,我不应该重载。
运营商'。'是无法超载的这些运营商之一。
但是,为了最好的了解,这种重载是否很糟糕?
我认为,这真的很糟糕。
但我不需要知道,如果我有对象或指针对象
然而,这很有趣又危险
class A {
public:
get_int(){ return a }
A(){ a=1 }
operator A*(){ return this }
private: int a;
};
int main(){
A a;
A* c = a;
//here, c->get_int() will return 1
}
答案 0 :(得分:2)
您需要重载间接运算符->
以允许通用x->foo()
语法,而不管x
是否为指针:
T * T::operator->() { return this; }
用法:
T x, * p = &x;
p->foo(); // OK as usual
x->foo(); // also OK, weirdly
示例:
#include <cstdio>
struct Foo
{
void foo() { std::puts("Boo"); }
Foo * operator->() { return this; }
};
int main() { Foo x, * p = &x; p->foo(); x->foo(); }