gpt4 book ai didi

c++ - 努力使 '==' 运算符重载工作 (C++)

转载 作者:太空狗 更新时间:2023-10-29 19:41:07 27 4
gpt4 key购买 nike

好吧,我不确定我在这里做什么,只是不对。试图重载一个类的“==”方法,它只是……不起作用。至少,我从我的 main 得到了一个 false 返回,并且 '==' 实现中的 cout 没有输出。

这是我的三个文件:

// TestClass.h

#ifndef TESTCLASS_H
#define TESTCLASS_H

class TestClass {
public:
TestClass(int contents);
TestClass(const TestClass& orig);
virtual ~TestClass();
bool operator==(const TestClass& other);
private:
int contents;
};

#endif /* TESTCLASS_H */



// TestClass.cpp

#include <iostream>

#include "TestClass.h"

TestClass::TestClass(int contents) {
this->contents = contents;
}

TestClass::TestClass(const TestClass& orig) {
this->contents = orig.contents;
}

TestClass::~TestClass() {
}

bool TestClass::operator ==(const TestClass& other) {
std::cout << "COMPARING" << std::endl;
return (contents == other.contents);
}


// Main.cpp

#include <cstdlib>
#include <iostream>

#include "TestClass.h"

using namespace std;

/*
*
*/
int main(int argc, char** argv) {

TestClass* tc = new TestClass(1);
TestClass* tc1 = new TestClass(1);

cout << (tc == tc1) << endl;

return 0;
}

所以问题是 - 我做错了什么?对于某处可能是一个非常愚蠢的错误,我深表歉意,但我就是无法发现它。

最佳答案

tc == tc1 比较指针值。它“应该”是 *tc == *tc1,但我不明白为什么你首先要动态分配。

高度推荐自动(堆栈)分配,仅当您需要对象独立于作用域时才动态分配。 (然后用自动分配的智能指针跟踪它,它会在适当的时候删除指针。)


另外,运算符应该是const,因为它不会修改this:

//                                      vvvvv
bool operator==(const TestClass& other) const;

不过,更好的是免费功能:

bool operator==(const TestClass& lhs, const TestClass& rhs);

这可能是 friend 。 (自由函数总是首选,而且这允许 5 == tc 工作。)

关于c++ - 努力使 '==' 运算符重载工作 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3526690/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com