多年来,我一直在兜圈子,试图在 C++ 中正确实现继承,而 Google 并没有真正提供帮助。我有工作 Java 代码,我正在移植到严重依赖接口的 C++。
我正在为一些遗传算法编写一个测试平台,所以我需要通用变量,允许该类的任何类型与它们相关联,允许执行相同的功能,而不管具体类型如何。例如,我需要一个“交叉”类型,它允许将任何类型的交叉存储在变量中,并允许对其执行相同的交叉方法集。
我用纯虚函数“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”:成员函数未在 'simulatedbinarycrossover' 中声明” Intellisense 将其称为“不允许继承的成员”。
希望我说得有道理,尝试和描述这是一个非常棘手的问题。
欢迎所有建议。