zoukankan      html  css  js  c++  java
  • 虚函数重载(overwrite) 继承覆盖问题

    引言

    类接口需要添加默认参数,以适应不同情况调用, 但是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
    ");
    	}
    };
    
    
    int main(){
    	derived mem;
    	mem.foo();
    }
    
    

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

    结果

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

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

  • 相关阅读:
    Python笔记220151023
    B/S和C/S【转载Jane的博客 http://blog.sina.com.cn/liaojane】
    Java Queue
    Java 使用 .this与.new
    Java多态继承与清理
    Java 匿名类
    Java 内部类2
    java 中的多重继承
    Java 内部类
    Java 异常(自定义异常)
  • 原文地址:https://www.cnblogs.com/hustcpp/p/11736943.html
Copyright © 2011-2022 走看看