2

我是 C++ 新手(来自 Java 和 C#),我正在尝试在我的一个类中覆盖 == 运算符,以便查看我是否有 2 个对给定属性具有相同值的对象。我一直在做一堆谷歌搜索并试图做​​出一些有效的东西。我需要的是 == 运算符在 2 个对象具有相同_name文本时返回 TRUE。

这是头文件:

//CCity.h -- city class interface
#ifndef CCity_H
#define CCity_H

#include <string>

class CCity
{
friend bool operator ==(CCity& a,  CCity& b)
{
    bool rVal = false;
    if (!(a._name.compare(b._name)))
        rVal = true;
    return rVal;
}
private:
    std::string _name;
    double _x; //need high precision for coordinates.
    double _y;
public:
    CCity (std::string, double, double); //Constructor
    ~CCity (); //Destructor
    std::string GetName();
    double GetLongitude();    
    double GetLatitude();
    std::string ToString();
};
#endif

在我的 main() 方法中:

    CCity *cit1 = new CCity("bob", 1, 1);
    CCity *cit2 = new CCity("bob", 2, 2);
    cout<< "Comparing 2 cities:\n";
    if (&cit1 == &cit2)
        cout<< "They are the same \n";
    else
        cout << "They are different \n";
    delete cit1;
    delete cit2;

问题是我在friend bool operator ==块中的代码永远不会被执行。我觉得我在声明该运算符的方式或使用它的方式上做错了。

4

2 回答 2

5

&当您真的想使用以下方法取消引用时,获取(您正在比较指针)的地址*

if (*cit1 == *cit2)
    cout<< "They are the same \n";

无论如何,在这里使用指针绝对没有意义,更不用说愚蠢的指针了。

这是没有它们的样子(正确的方法):

CCity cit1("bob", 1, 1);
CCity cit2("bob", 2, 2);
cout<< "Comparing 2 cities:\n";
if (cit1 == cit2)
    cout<< "They are the same \n";
else
    cout << "They are different \n";

此外,正如 WhozCraig 所提到的,考虑为您的operator==函数使用 const-ref 参数,因为它不应该修改参数。

于 2013-02-04T04:06:26.010 回答
3

使用此代码:

CCity *cit1 = new CCity("bob", 1, 1);
CCity *cit2 = new CCity("bob", 2, 2);
cout<< "Comparing 2 cities:\n";
if (&cit1 == &cit2)
    cout<< "They are the same \n";
else
    cout << "They are different \n";

您正在将指针与指向 CCity 实例的指针进行比较。

你想要这样的东西:

CCity *cit1 = new CCity("bob", 1, 1);
CCity *cit2 = new CCity("bob", 2, 2);
cout<< "Comparing 2 cities:\n";
if (*cit1 == *cit2)
    cout<< "They are the same \n";
else
    cout << "They are different \n";
于 2013-02-04T04:06:32.827 回答