2013-11-09 29 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

相关问题