2012-08-03 88 views
0

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

回答

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