必须实现继承的selfclass的纯虚方法

时间:2016-06-08 15:40:23

标签: c++ inheritance abstract-class virtual-functions

以下问题: 我有一个抽象的母类,两个子类和一个类,它使用子类的函数。

motherclass:

Vektor.h

class Vektor {
public:
    Vektor();
    virtual bool range() const = 0;
    virtual ~Vektor();
};

子类:

Absolutvektor.h

class Absolutvektor: public Vektor {
public:
    Absolutvektor(int x, int y);
    int x;
    int y;
    virtual ~Absolutvektor();
    virtual bool range (int x, int y);
};

Einheitsvektor.h

class Einheitsvektor : public Vektor {
public:
    Einheitsvektor(int x, int y, int richtung);
    int x;
    int y;
    int richtung;
    virtual ~Einheitsvektor();

    virtual bool Einheitsvektor::range (int richtung);

};

“普通班级”: schiff.h

#pragma once
#include <Einheitsvektor.h>
#include <Absolutvektor.h>

class Schiff {
    public:
        Schiff(int schiffId, int schiffLaenge, Absolutvektor absolutvektor, Einheitsvektor einheitsvektor, bool segmentestati[]);
        int schiffId;
        int schiffLaenge;
        Absolutvektor absolutvektor;
        Einheitsvektor einheitsvektor;
        bool segmentestati[] = false;
        // c++ vektor
};

Schiff.cpp:

#include "Schiff.h"

Schiff::Schiff(int schiffId, int schiffLaenge, Absolutvektor absolutvektor, Einheitsvektor einheitsvektor, bool segmentestati[]){
    this -> schiffId = schiffId;
    this -> schiffLaenge = schiffLaenge;
}

现在我在Schiff文件中遇到错误:

  

“Einheitsvektor”类型必须实现继承的纯虚拟   方法'Vektor :: range'

错误出现六次,在Schiff.cpp中出现两次,在Schiff.h中出现四次

我不知道为什么要为“Vektor”实现这个函数,因为这是一个抽象类,我有两个不同的函数范围用例。

1 个答案:

答案 0 :(得分:0)

Einheitsvektor中,您需要声明方法range,就像在母班(Vektor)中一样。所以它应该是这样的:bool range(){ ... },而不是bool range (int richtung)。如果您希望它有一个参数,您必须再声明一个接受基类中的参数的方法,或者修改当前的参数,使其具有如下参数:virtual bool range(int richtung) const = 0;。你必须对virtual bool range (int x, int y);做同样的事情(在这种情况下,唯一的选择是声明第二个范围方法,有两个参数,所以你将有一个范围方法接受一个参数,一个接受2)。

class Vektor {
public:
    Vektor();
    virtual bool range(int richtung) = 0 ;
    virtual bool range (int x, int y) = 0;
    virtual ~Vektor();
};