0

我知道,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
}
4

1 回答 1

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(); }
于 2012-08-03T12:34:34.957 回答