gpt4 book ai didi

C++ 运算符与方法重载及其不同行为

转载 作者:行者123 更新时间:2023-11-30 04:17:07 25 4
gpt4 key购买 nike

我目前正在用 C++ 实现标签支持类。但是,我对重载运算符和 isEqual 方法的不同行为感到有点困惑:

class Lbl
{
public:
virtual bool operator == (const Lbl* l) const = 0;
virtual bool isEqual (const Lbl* l) const = 0;
};

class SubLbl : public Lbl
{
public:
SubLbl(){}

bool operator == (const Lbl* l) const {return true;}
bool isEqual (const Lbl* l) const {return true;}
};

int main(int argc, char** argv) {
SubLbl* l1 = new SubLbl();
SubLbl* l2 = new SubLbl();

cout << (l1 == l2) << endl;
cout << (l1->isEqual(l2)) << endl;
return 0;
}

输出:

0
1

这是为什么?我需要如何更改它才能使运算符也重载?为什么我必须继承“public”才能访问“isEqual”方法?还是这只是我迄今为止未使用(也不知道)的模板的典型情况?

我正在做的是实现不同的 SubLbl 类,以支持我可以放在对象上的不同类型的标签。所有(SubLbl 类)都继承自 Lbl 类,并且由于它们自己的相等定义而应该重载相等运算符(int 比较不​​同于两个复杂对象的比较,甚至不同于双重比较)。后面(在程序中)我不想知道我现在在看什么样的子标签,我只想知道它们是否相等。

最佳答案

这个:

l1 == l2

正在比较指针。只有当 l1l2 的地址相同时,这才会成立。

这个

l1->isEqual(l2)

正在执行调用返回 true 的成员函数。

关于C++ 运算符与方法重载及其不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17290605/

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