C ++:重载运算符。好奇的类型转换运算符

时间:2012-08-03 12:29:20

标签: c++ operator-overloading

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

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(); }