C ++中的继承和接口

时间:2012-10-23 13:44:44

标签: c++ inheritance interface

我一直在圈子里试图在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称其为”不允许继承的成员“。

希望我有所了解,尝试描述这是一个非常棘手的问题。

欢迎所有建议。

1 个答案:

答案 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...
}