gpt4 book ai didi

c++ - 如何强制派生类比较

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:55 24 4
gpt4 key购买 nike

我有一个虚拟 class Element 强制其派生类具有 == 运算符:

因此,我有实现该运算符的派生类(Integer、Word)。

我有一个 class Group,它基本上是一个元素列表。

在一个函数中,我想比较一个组中的元素是否等于另一个组中的元素,所以我使用:

if(actual == lookingfor)

其中 actual 和 lookingfor 都是指向 Element 的指针...但是比较是在指针级别进行的,因此两个指针总是不同的。

如何强制使用元素的派生类中的运算符 ==?

编辑:

class Element 
{
virtual int operator==(Elemento *)=0;
}

class Word : public Element { ... }

int Word::operator==(Element * element)
{
Element * ptr = element;
Word * wordPtr = dynamic_cast< Word * >(ptr);
int equal = 0;
if(wordPtr)
{
equal = strncmp(this->ptr,wordPtr->ptr,49)==0;
}
return igual;
}

最佳答案

我不知道 == 运算符是否会完全满足您的要求,但您始终可以定义一个虚拟方法:

class Element {
[...]
virtual IsEqualTo(const Element & rhs) const = 0;
};

...然后对于每个子类,实现如下方法:

class Word : public Element {
[...]
virtual IsEqualTo(const Element & rhs) const
{
const Word * wrhs = dynamic_cast<const Word *>(&rhs);
return ((wrhs)&&(*wrhs == *this));
}
};

... 然后您的组方法可以根据需要直接在组中的各种元素上调用 IsEqualTo() ,或者如果您希望使其“漂亮”,您可以实现 Element::operator==(const元素 &) 改为在内部调用 IsEqualTo() ,并让您的组方法(等)调用它,例如

bool Element :: operator == (const Element & rhs) const
{
return IsEqualTo(rhs);
}

关于c++ - 如何强制派生类比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11077269/

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