如何在不使其成为友元函数的情况下重载 == 运算符?
How to overload == operator without making it a friend function?
我有一个 class SomeClass
并且我希望实现一个重载 ==
来比较这个 class.
的两个实例
重载的 ==
没有使用任何 SomeClass
的私有成员。所以,它不一定是 friend
.
如何使其成为非成员、非友元函数?
目前,我的代码是这样的:
someclass.h
#ifndef SOMECLASS_H
#define SOMECLASS_H
class SomeClass
{
public:
// Other class declarations, constructors
friend bool operator==(const SomeClass a, const SomeClass b);
};
someclass.cpp
#include "someclass.h"
// Other stuff
bool operator==(const SomeClass a, const SomeClass b) {
// do some comparison and return true/false
}
就像 @HolyBlackCat 指出的那样,您可以提供 operator==
重载作为自由函数。它将是 free-function,这意味着您可以写
#ifndef SOMECLASS_H
#define SOMECLASS_H
// namespaces if any
class SomeClass
{
// Other class declarations, constructors
};
bool operator==(const SomeClass& a, const SomeClass& b) noexcept
{
// definition
}
// end of namespaces if any!
#endif // end of SOMECLASS_H
或
在header中声明operator==
并在相应的cpp文件中提供free函数的定义
我有一个 class SomeClass
并且我希望实现一个重载 ==
来比较这个 class.
重载的 ==
没有使用任何 SomeClass
的私有成员。所以,它不一定是 friend
.
如何使其成为非成员、非友元函数?
目前,我的代码是这样的:
someclass.h
#ifndef SOMECLASS_H
#define SOMECLASS_H
class SomeClass
{
public:
// Other class declarations, constructors
friend bool operator==(const SomeClass a, const SomeClass b);
};
someclass.cpp
#include "someclass.h"
// Other stuff
bool operator==(const SomeClass a, const SomeClass b) {
// do some comparison and return true/false
}
就像 @HolyBlackCat 指出的那样,您可以提供 operator==
重载作为自由函数。它将是 free-function,这意味着您可以写
#ifndef SOMECLASS_H
#define SOMECLASS_H
// namespaces if any
class SomeClass
{
// Other class declarations, constructors
};
bool operator==(const SomeClass& a, const SomeClass& b) noexcept
{
// definition
}
// end of namespaces if any!
#endif // end of SOMECLASS_H
或
在header中声明operator==
并在相应的cpp文件中提供free函数的定义