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

问题描述:

我知道,那个C++有运算符,那我的应该不是过载。C++:重载操作符。好奇类型转换运算符

operator'。'是这些运营商之一,我不能过载。

但是,为了最好的知识,这种重载是不好的?

我认为,这是非常糟糕的。
但我不需要知道,如果我有对象或指向对象的指针。
然而,这是有趣的和危险的

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

有什么问题吗? – AProgrammer 2012-08-03 12:31:54

+0

这个重载不好吗?请为什么原因。我只看到像'object'和'pounter-to-object'这样的含义太大,并且他们的可访问性为 – gaussblurinc 2012-08-03 12:32:19

+0

+1,因为“然而,这很有趣也很危险”,尽管我不知道你的问题是什么。 – 2012-08-03 12:33:37

你需要重载间接运算符->,让通用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(); } 
+0

- > operater不会返回一个引用,而不是一个指针吗?所以'T&T ::运营商 - >()' – 2012-08-03 12:35:58

+0

@WoodrowDouglass:号 – 2012-08-03 12:36:42

+0

好吧,我站在纠正。 – 2012-08-03 12:37:02