2013-03-14 97 views
1

運算符=是否可以重載類指針。本實施例中嘗試過載「運算符=」爲指針「可愛*」:指針運算符是否可以在C++中重載?

class Cutie  
{ 
public: 
    int Krait; 

    Cutie() : Krait(0) 
    { 
    } 
}; 

Cutie* operator = (Cutie* p, Cutie* q) 
{ 
    if(p == 0) 
    { 
     if(0 < Krait) 
      Krait--; 
    } 
    else 
     Krait++; 
} 

上述確定指標有錯誤。我在尋找,計數指針賦值一個definiton:

Cutie c; 
Cutie* p = 0; 
p = &c; 

現在的 'p - >金環蛇' 應該是 '1'。

+5

你試過編譯它? – 2013-03-14 18:03:14

+0

這有錯誤。這個試驗只是爲了澄清這個問題。 – user2029077 2013-03-14 18:04:38

+1

什麼錯誤? – 2013-03-14 18:05:15

回答

5

不,你不能有一個非成員運算符重載函數,只需要指針作爲它的參數:

An operator function shall either be a non-static member function or be a non-member function and have at least one parameter whose type is a class, a reference to a class, an enumeration, or a reference to an enumeration.

+0

因此指針運算符不能被重載,無論它是在類內還是外部定義的? – user2029077 2013-03-14 18:08:50

+0

指針運算符是什麼意思?這是賦值操作符。不,你不能爲指針重載賦值操作符 - 這會使指針的行爲非常糟糕。你希望能在這裏做什麼? – 2013-03-14 18:10:33

+2

@CutieKrait好的,你不能這樣做。但是,您可以提供類似於指針的類型並執行相同的工作。實際上,'std :: shared_ptr'就是這樣做的。 – 2013-03-14 18:30:01