- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
好吧,我不确定我在这里做什么,只是不对。试图重载一个类的“==”方法,它只是……不起作用。至少,我从我的 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/
我正在尝试为我的项目创建一些单元测试,经过大量挖掘之后,我发现了Effort,这个想法很棒,它模拟数据库而不是处理伪造的DBContext,顺便说一句,很难做到正确使用复杂的架构。 但是,我将用户的电
我正在尝试对某些响应 Entity Framework 数据库上下文的类进行单元测试。为了寻求帮助,我设法找到了一个名为 Effort 的库,它似乎有点旧,而且没有很好的文档记录,但它似乎可以工作,而
这两天,Auto-GPT 爆火 https://github.com/Torantulino/Auto-GPT 它是一款让最强语言模型GPT-4能够自主完成任务的模型,让整个AI圈疯
为什么会出现这个异常?这是错误吗? 我正在使用 EF 测试库 Effort 创建我的数据库的内存实例并遇到这个有趣的场景: 打开DbContext1 将项目添加到表(不保存) 关闭DbContext1
我是一名优秀的程序员,十分优秀!