C++运算符重载:将友元函数转换为成员函数的实现问题
没问题,我帮你把这两个友元运算符重载转换成成员函数版本,还会讲清楚关键的变化点~
转换后的成员函数实现
首先,先补全你已经开始写的operator<成员函数。作为成员函数,左操作数就是当前对象(通过this指针访问),所以只需要接收右操作数作为参数:
// 先在MyClass类的声明中添加成员函数声明 class MyClass { private: int value; // 假设你的类包含这个成员变量 public: inline bool operator<(const MyClass& right) const; // 加const保证不修改成员变量 inline bool operator>(const MyClass& right) const; }; // 补全operator<的实现 inline bool MyClass::operator<(const MyClass& right) const { // 把原友元代码里的left替换为this->value,逻辑完全一致 return (((this->value == 1) ? 14 : this->value) < ((right.value == 1) ? 14 : right.value)); }
然后是operator>的成员函数实现。原友元版本是复用operator<(right, left),作为成员函数的话,我们可以调用右操作数的operator<并传入当前对象(*this),这样就等价于比较right < *this,完美对应原逻辑:
inline bool MyClass::operator>(const MyClass& right) const { // 复用operator<,两种写法都可以,效果一致 return right.operator<(*this); // 或者更简洁的写法:return right < *this; 编译器会自动匹配成员函数版本 }
关键注意点
- 成员函数版本的运算符重载,左操作数是当前类的对象(
this指向的实例),所以参数列表只需要接收右操作数。 - 一定要给成员函数加上
const修饰,因为这些比较运算符不会修改任何对象的状态,这样才能支持const对象之间的比较。 - 复用运算符的逻辑和友元版本完全一致,只是调用方式因为成员函数的特性略有调整。
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

