首页 > 其他 > 详细

虚函数重载(overwrite) 继承覆盖问题

时间:2019-10-25 13:13:32      阅读:84      评论:0      收藏:0      [点我收藏+]

引言

类接口需要添加默认参数,以适应不同情况调用, 但是clang-tidy 不允许在接口上设置默认参数,ps: 可能担心继承类里接口重新设置新默认参数而导致误用的情况

#include <stdio.h>
struct base{
    virtual void foo() = 0;
    virtual void foo(int)=0;
    virtual ~base(){}
};

struct derived:public base{
    void foo() {
        foo(1);
    }
    void foo(int){
        printf("asads\n");
    }
};


int main(){
    derived mem;
    mem.foo();
}

于是解决办法有:
1. 新加一个基类具体方法,在具体方法里调用纯虚函数
2. 新加一个基类抽象方法,在子类重写方法里调用虚函数

结果

第一个方法失败,子类实例找不到基类的方法,很奇怪
第二个方法必须将重载函数定义在头文件里才行,如上面的示例代码, 定义在源文件里时,子类重载函数找不到重写方法。

所以目前模板函数需要定义在头文件里, 虚函数重写互调时也需要定义在头文件里了

虚函数重载(overwrite) 继承覆盖问题

原文:https://www.cnblogs.com/hustcpp/p/11736943.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!