以下问题: 我有一个抽象的母类,两个子类和一个类,它使用子类的函数。
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”实现这个函数,因为这是一个抽象类,我有两个不同的函数范围用例。
答案 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();
};