我有一个抽象的class A,在它的子类(class B)中有一个虚函数void fnc(XX*),我想收紧函数参数类型(我希望这是正确的词),所以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);
}发布于 2016-12-12 10:22:09
在C++中不支持协变函数参数类型。
一般情况下,它也不是很受支持,因为它很容易违反Liskov替换原则。
但是无论如何,代码中发生的情况是,您重载了函数。添加另一个需要重写的纯虚拟函数。原来的那个还没有实现,你的编译器会抱怨它。
https://stackoverflow.com/questions/41098607
复制相似问题