【发布时间】:2016-10-08 23:48:56
【问题描述】:
以下问题: 我有一个抽象母类,两个子类和一个类,它使用子类的功能。
母班:
Vektor.h
class Vektor {
public:
Vektor();
virtual bool range() const = 0;
virtual ~Vektor();
};
子类:
绝对向量.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”实现函数,因为这是一个抽象类,而且函数范围有两个不同的用例。
【问题讨论】:
-
虚函数上的签名需要与实现上的签名相匹配。
-
bool range ();和bool range (int richtung);不是同一个函数。您可能认为您在Einheitsvektor::range中覆盖了Vektor::range,但 C++ 没有。如果您要覆盖函数,请使用override关键字。
标签: c++ inheritance abstract-class virtual-functions