【发布时间】:2017-04-27 04:28:24
【问题描述】:
我有一个抽象 class A 和一个虚函数 void fnc(XX*)
在它的子类(class B)中,我想收紧函数参数类型(我希望这是正确的词),所以 fnc 只接受YY*,它是XX 的子类。
它不起作用,因为我收到此错误:
invalid new-expression of abstract class type 'C'
because the following virtual functions are pure within 'C':
virtual void A::fnc(XX*)
代码:
// Example program
#include <iostream>
#include <string>
class XX {};
class YY : public XX {};
class A {
public:
virtual void fnc(XX*) = 0;
};
class B : public A {
public:
virtual void fnc(YY*) = 0;
};
class C : public B {
public:
virtual void fnc(YY*) override {
std::cout << "test" << std::endl;
}
};
int main() {
YY* yy = new YY();
C* cc = new C();
cc->fnc(yy);
}
【问题讨论】:
-
如果允许的话,A 的界面就会撒谎。一个说谎的界面对任何人都没有用。
标签: c++ class inheritance interface