gpt4 book ai didi

c++ - 如何在派生类数据中使用基类进行比较

转载 作者:行者123 更新时间:2023-12-01 14:20:05 25 4
gpt4 key购买 nike

我在 C++ 中有基类和派生类。
我想使用基类的指针来确定派生类的数据是否相同。
枚举类型

enum class FruitType: int{
Apple,
Orange,
};
基类
class Base{
public:
Base(FruitType t): fruit_type(t){}
FruitType fruit_type;
};
派生类
class Apple : public Base{
public:
Apple(int i): Base(FruitType::Apple), foo(i){}
int foo;
};
class Orange : public Base{
public:
Orange(float f): Base(FruitType::Orange), bar(f){}
float bar;
};
初始化
// initialize
std::vector<Base*> fruit_list_ = {
new Apple(42),
new Orange(0.f),
new Apple(1) };
有什么办法可以检查 HasSameData() 吗?
Base* HasSameData(const Base* pCompare){
for (const auto& list : fruit_list_)
{
if( pCompare->fruit_type == list->fruit_type ){
// how to check same data...?
if( /* ... */ ){
return list;
}
}
}
return nullptr;
}

int main(){
// check same data
Base* pCompare = fruit_list_[2];
if(HasSameData(pCompare)){
// I want to return fruit_list_[2] pointer...
}
}

最佳答案

您可以将抽象方法 sameData() 添加到基本案例

class Base{
public:
Base(FruitType t): fruit_type(t){}
FruitType fruit_type;
virtual bool sameData(const Base& other) const = 0;
};
在派生类中重写:
class Apple : public Base{
public:
Apple(int i): Base(FruitType::Apple), foo(i){}
int foo;
virtual bool sameData(const Base& other) const {
const Apple* apple = dynamic_cast<const Apple*>(&other);
return apple && apple->foo == foo;
}
};

class Orange : public Base{
public:
Orange(float f): Base(FruitType::Orange), bar(f){}
float bar;
virtual bool sameData(const Base& other) const {
const Orange* orange = dynamic_cast<const Orange*>(&other);
return orange && orange->bar == bar;
}
};
并按如下方式使用它:
// how to check same data...?                                       
if( pCompare->sameData(*list) ){

关于c++ - 如何在派生类数据中使用基类进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63065783/

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