c++复习之语法特性::函数重写(override)、函数定义、函数重载与协变返回类型(covariant return type)

本文介绍了C++中的函数重载、重写和协变返回类型。函数重载要求同名不同参,而重写发生在继承关系中,需满足特定条件,包括返回值类型的一致或协变。协变返回类型允许子类重写函数时返回父类返回值类型的子类指针或引用,提高了代码的灵活性。此外,还讨论了重定义(重载)的情况,指出非虚函数在派生类中会被隐藏。
摘要由CSDN通过智能技术生成

最近在复习C++,对函数重载、函数重写、函数重定义与协变返回类型概念很不清晰,所以在此整理总结~~首先来看函数重载与函数重写


函数重载与函数重写

  • 函数重载
    1、两个函数在同一个作用域
    2、同名不同参(不同的参数类型、不同的参数个数、不同的参数顺序)

  • 函数重写
    1、两个函数不在同一个作用域(主要在继承关系中体现:分别在基类和派生类)
    2、子类重新定义父类中同名同参的虚函数


函数重写需要注意的条件

  • 基本条件
    1、派生类重写的函数与基类中被重写的函数都必须是virtual函数,子类中最好也写为虚函数
    2、参数必须保持一致,否则就是子类中自己的成员函数,未构成函数重写
    3、重写的函数与被重写的函数返回值类型相同,或者当返回指针或引用时,子类中重写的函数返回的指针或者引用就是父类中被重写函数所返回指针或引用的子类型(协同返回类型)
    4、子类中的函数与父类中的同名函数具有相同的参数和返回值类型时,如果一个是const函数,一个是非const函数,不构成重写
  • 注意
    1、重写的函数所抛出的异常必须和被重写的函数抛出的异常一致,或者是其子类
    2、重写的函数的访问修饰符可以不同于被重写的函数,如基类中被重写的函数访问修饰符为private,派生类中重写的函数的访问修饰符可以为public或protected
    3、静态方法不能被重写,因为static与virtual不能同时被使用
    4、子类中重写的函数virtual关键字可以加也可以不加, 本质上都是虚函数的属性,只要与基类中的相关函数构成重写关系。
class A{}; 
class B:public A{};

class C
{
public:
    virtual void func1()
    { cout << "C::func1()" << endl;}

    virtual A* func2()
    {
        cout << "C::func2()" << endl;
        return new A;
    } 

    virtual A& func3()
    {
        cout << "C::func3()" << endl;
        return *(new A);        
            
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值