gpt4 book ai didi

c++ - 使用其他基类的子类实现抽象类方法

转载 作者:行者123 更新时间:2023-11-28 07:34:27 26 4
gpt4 key购买 nike

我正在尝试定义一个名为“Algorithm”的接口(interface),它有一个纯虚方法 insertData(InputData* input)。

接口(interface)的实现称为“Algorithm1”,我想使用“InputData”类的子类“SpecificData”作为参数来实现方法“insertData”。

没有类型转换是否可能?

很明显,对于这段代码,我从编译器中得到一个错误,即虚函数“insertData”在“Algorithm1”中是纯函数。

class Algorithm{
public:
virtual ~Algorithm();
virtual void insertData(InputData* input) = 0;
};

class Algorithm1 : public Algorithm{
public:
Algorithm1();
virtual ~Algorithm1();

void insertData(SpecificData* input){
input.getID();
input.getAdditionalNumbers;
/*Process input information etc.*/ };
};

class InputData{
public:
void setID(int id){ this->id = id; }
int getID(){ return id;};
private:
int id;
};

class SpecifiData : public InputData{
public:
list<int> getAdditionalNumbers(){/*Return various Numbers*/};
private:
list<int> extraInfo;
};

void main(){
SpecificData* data = new SpecificData();
Algorithm* alg = new Algorithm1();
alg->insertData(data);
}

最佳答案

要使 insertData 成为同一个函数(而不是“隐藏”原始 insertData,您需要两个函数具有相同的参数(和相同的返回类型) .

使用虚函数的接口(interface)的整体思想是“它们从外部看起来是一样的”。您应该能够构建一个对象列表,并对列表中的所有对象使用相同的输入数据执行相同的操作。

如果您违反了该原则,那么您就是“做错了”。

关于c++ - 使用其他基类的子类实现抽象类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17024159/

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