首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类中的C++收紧函数参数类型

子类中的C++收紧函数参数类型
EN

Stack Overflow用户
提问于 2016-12-12 10:21:05
回答 1查看 67关注 0票数 0

我有一个抽象的class A,在它的子类(class B)中有一个虚函数void fnc(XX*),我想收紧函数参数类型(我希望这是正确的词),所以fnc只接受YY*,这是XX的一个子类。

它不起作用,因为我得到了这个错误:

代码语言:javascript
复制
invalid new-expression of abstract class type 'C'
because the following virtual functions are pure within 'C':
virtual void A::fnc(XX*)

代码:

代码语言:javascript
复制
// 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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-12 10:22:09

在C++中不支持协变函数参数类型。

一般情况下,它也不是很受支持,因为它很容易违反Liskov替换原则。

但是无论如何,代码中发生的情况是,您重载了函数。添加另一个需要重写的纯虚拟函数。原来的那个还没有实现,你的编译器会抱怨它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41098607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档