我是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 ==
块中的代码永远不会被执行。我觉得我正在做错的方式,无论我是如何声明操作符,或者我是如何使用它的。
答案 0 :(得分: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参数,因为它不应该修改参数。
答案 1 :(得分:2)
使用此代码:
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";