You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++重载operator==比较对象时出现段错误该如何解决?

C++重载operator==实现自定义类相等比较的正确方案

错误原因梳理

  • 段错误核心原因:你在operator==的实现里直接写了*(this) == op1,这相当于直接调用你正在实现的operator==本身,造成无限递归,函数栈溢出后触发段错误。
  • 基础语法错误1:using namespace后面缺少std;,语句不完整。
  • 基础语法错误2:main函数定义缺少大括号包裹函数体,语法非法。
  • 类型匹配错误:你尝试修改的this == op1是拿当前对象的指针和op1对象本身对比,两者类型完全不匹配,自然会触发编译错误。
  • 优化缺失点:operator==的参数建议用const引用,避免不必要的对象拷贝,同时函数本身也声明为const,保证常量对象也能调用该运算符。

正确实现逻辑

相等比较需要手动对比类中所有需要参与相等判断的成员变量即可,你可以根据业务规则决定哪些成员需要参与对比:比如认为书名、价格、页数完全一致才是相等的书,就同时对比三个成员;如果只要求价格和页数相同就算相等,只对比这两个成员即可。

修复后的完整代码

#include <iostream>
#include <string> // 使用std::string必须引入对应头文件
using namespace std;

class Book{
    string title;
    int price, pages;
public:
    Book(string title = "", int price = 0, int pages = 0){
        this->title = title;
        this->price = price;
        this->pages = pages;
    }
    bool operator==(const Book& op1) const;
};

bool Book::operator==(const Book& op1) const {
    // 此处示例三个成员都参与相等判断,可根据需求调整对比规则
    return title == op1.title && price == op1.price && pages == op1.pages;
}

int main() {
    Book a("Good C++", 30000, 500), b("Bad C++", 30000, 500);
    if (a == b)
        cout << "Same books" << endl;
    else
        cout << "Different books" << endl;
    return 0;
}

运行说明

上述代码运行后会输出Different books,因为两个对象的title属性不相等。如果要调整相等判断规则,比如仅要求价格和页数相等就算相同,只要把title == op1.title &&这部分条件删掉即可。

内容的提问来源于stack exchange,提问作者Chung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:57:05