函数重载和虚函数继承

本文探讨了函数重载和虚函数继承的概念。派生类重载了基类的函数f和g,调用时实际执行的是派生类的版本。基类CBase的虚拟函数f被覆盖,而g函数的调用展示了虚函数的作用。同时解释了虚函数声明为纯虚函数后,如何作为抽象类的接口,要求派生类必须提供其实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数重载和虚函数继承

#include <stdio.h>
class CBase
{
public:
    virtual void f(int x)               //虚函数
    {
        printf("CBase:f 函数打印:整数 %d\n", x);
    }
    void g(float x)
    {
        printf("CBase: g 函数打印:浮点小数%f\n", x);
    }
};

class CBerived :public CBase
{
public:
    void f(int x)                       //重载
    {
        printf("CBerived : f 函数打印:整数 %d\n", x);
    }
    void g(float x)
    {
        printf("CBerived : g 函数打印:浮点小数 %f\n", x);
    }

};
void main()
{
    CBerived DerivedIbj;//调用派生类函数
    DerivedIbj.f(3);
    DerivedIbj.g(6.0f);
    CBase *pBaseObj = &DerivedIbj;//转换为基类对象进行调用
    pBaseObj->f(3);
    pBaseObj->g(6.0f);//调用基类g函数

}

输出结果
CBerived : f 函数打印:整数 3
CBerived : g 函数打印:浮点小数 6.000000
CBerived : f 函数打印:整数 3
CBase: g 函数打印:浮点小数6.000000

派生类重载基类的函数f和g,因此派生类调用f和g,实际就是调用派生类的函数f和g。
因为在基类CBase的函数f为virtual函数,而派生类CDerived又重载了该函数;所以f函数被覆盖掉,即CBase函数实际是CDerived::f和CBase::g。

虚函数:

一个函数一经声明为virtual函数,它在派生类众的重载函数也是virtual函数,不必再用virtual修饰;
虚函数的声明之后加上“=0”,函数即为纯虚函数。一个类包含纯虚函数,该类函数成为抽象类。

virtual 函数返回值类型 函数名(参数列表) = 0;

抽象类不能创建对象,作为派生类的接口规范,要求派生类必须提供一个纯虚函数的具体实现,否则产生编译错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值