2013-11-09 83 views
-1

爲什麼不是==運算符得到正確的超載(所以它只能返回true)?我試過沒有*但它沒有幫助。爲什麼operator ==不會超載?

#include "stdafx.h" 
#include <iostream> 
    class alfa 
    { 
    public: 
     int x; 
     bool operator == (alfa * &f) 
     { 
      return true; 
     } 

    }; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    //alfa alfa2; 
    alfa * tab[2]; 
    tab[0] = new alfa; 
    tab[1] = new alfa; 
    if(tab[0] == tab[1]) 
    { 
     std::cout << "tak"; 
    } 

    scanf("%d"); 
} 
+0

谷歌翻譯最近有所改善。 –

+0

Duplicate:http://stackoverflow.com/questions/4421706/operator-overloading – JBentley

回答

4

您的運營商是alfa成員,因此它不能接受兩個alfa指針,而是一個alpha實例的LHS和指向alpha在RHS。

如果你想操作員接受兩個alpha指針,你必須使它成爲一個非成員:

class alfa 
{ 
public: 
    int x; 
}; 

bool operator == (const alpha* lhs, const alfa* rhs) 
{ 
    return true; 
} 

但是你不能重載比較運營商內置類型如指針。你將不得不提供一個運營商可以在兩個實例行爲:

bool operator == (const alpha& lhs, const alfa& rhs) 
{ 
    return true; 
} 

然後,給出了兩個alpha指針ab,你可以這樣對它們進行比較:

*a == *b; 
+2

請注意,重載==指針是一個非常糟糕的主意。我想他想比較一下物體。 – zch

+0

@zch這不是一個壞主意,它是非法的。 – john

+0

@john好點。我不完全確定指向用戶定義類型的例外,但我找不到任何內容,因此我編輯了答案。 – juanchopanza

相關問題