我一直在圈子里试图在C ++中正确实现继承,谷歌并没有真正帮助。我有工作的Java代码,我正在移植到C ++,它很大程度上依赖于接口。
我正在编写一些遗传算法的测试平台,因此我需要通用变量,允许任何类型的类与它们相关联,允许执行相同的功能,而不管具体类型如何。例如,我需要一个'crossover'类型,它允许任何类型的交叉存储在变量中,并允许在其上执行相同的交叉方法。
我用纯虚函数“performCrossover”创建了一个接口。然后由通用的“交叉”类继承,然后由各个交叉类型继承。
目前,链接器抱怨我正在重新定义我所遇到的“problem :: performCrossover”,但这正是我所需要的。我可以通过在通用交叉类中使函数纯虚拟来解决这个问题,但是我无法实例化它,这正是我所需要的。
我也尝试过更改它“crossovername :: performCrossover”,但后来我得到'继承的成员不被允许'。这就是我现在所处的位置。
我的界面:
class crossoverinterface {
public:
virtual genome** performCrossover(genome* firstParent, genome* secondParent) = 0;
};
通用交叉类型我需要能够使用任何类型的交叉进行实例化。
class crossover: public crossoverinterface{
public:
crossover() {};
crossover(int genomeLength, int nObjectives);
~crossover();
genome** preCrossover(genome* firstParent, genome* secondParent);
virtual genome** performCrossover(genome* firstParent, genome* secondParent);
private:
genome** solution;
int genomeLength;
int nObjectives;
};
子类1的示例:
class simulatedbinarycrossover: public crossover {
public:
simulatedbinarycrossover(int genomeLength, int nObjectives, double lowerBound, double upperBound);
};
genome** simulatedbinarycrossover::performCrossover(genome* firstParent, genome* secondParent){
...code...
}
最后是错误:“performCrossover”:未在'simulationbinarycrossover'中声明成员函数“Intellisense称其为”不允许继承的成员“。
希望我有所了解,尝试描述这是一个非常棘手的问题。
欢迎所有建议。
答案 0 :(得分:7)
您必须在实例化的每个类定义中编写方法原型。
performCrossover
在基类中定义的事实并不意味着您不必在派生类中再次定义它。
class simulatedbinarycrossover: public crossover {
public:
simulatedbinarycrossover(int genomeLength, int nObjectives, double lowerBound, double upperBound);
genome** performCrossover(genome* firstParent, genome* secondParent) ;
};
genome** simulatedbinarycrossover::performCrossover(genome* firstParent, genome* secondParent){
...code...
}