C++学习笔记4:多态

本文深入探讨C++中的多态概念,通过实例解释虚函数如何实现多态,展示派生类指针和引用如何调用基类及派生类的同名虚函数,体现多态机制。

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

类的多态就是指多种形态,在接触多态前,我们先来认识一下虚函数。

虚函数

  • 在类的定义中,前面带有virtual关键字的成员函数就是虚函数
  • virtual只写在类定义的函数声明中,写函数体时不用。
    注意构造函数静态成员函数不能是虚函数。
class base{
	public:
		virtual int get();
		...
	...
};
int base::get(){
//函数体
};

虚函数与普通成员函数的区别就在于虚函数可以参与多态而普通的成员函数不能

多态的表现形式

表现形式一

派生类的指针可以赋值给基类指针。

如果,通过基类指针调用基类和派生类的同名虚函数,那么会出现以下两种情况:

  • 指针指向基类的对象,则被调用的是基类的虚函数
  • 指针指向派生类的对象,则被调用的是派生类的虚函数

这中机制就是多态。

示例:

#include <iostream>
using namespace std;

class CBase{
    public:
    virtual void SomeVirtualFunction(){
        cout<<"CBase"<<endl;
    }

};

class CDerived:public CBase{
    public:
    virtual void SomeVirtualFunction(){
        cout<<"CDerived"<<endl;
    }
    
};

int main(){
    CDerived ODerived;
    CBase *p=&ODerived;
    p->SomeVirtualFunction();	//调用哪个虚函数取决于p指向哪种类型的对象
    return 0;
}

debug后输出结果为:

CDerived

从上述程序中我们可以发现,在语句CBase *p=&ODerived;执行时,指针p指向派生类CDerived的对象ODerived,因此,调用的是ODerived中的虚函数SomeVirtualFunction

表现形式二

派生类的对象可以赋值给基类的引用。

如果,通过基类引用调用基类和派生类的同名虚函数,那么会出现以下两种情况:

  • 引用引用的是基类的对象,则被调用的是基类的虚函数
  • 引用引用的是派生类的对象,则被调用的是派生类的虚函数

这中机制也称为多态。

示例:

#include <iostream>
using namespace std;

class CBase{
    public:
    virtual void SomeVirtualFunction(){
        cout<<"CBase"<<endl;
    }

};

class CDerived:public CBase{
    public:
    virtual void SomeVirtualFunction(){
        cout<<"CDerived"<<endl;
    }

};

int main(){
    CDerived ODerived;
    CBase & r =ODerived;
    r.SomeVirtualFunction();
    return 0;
}

debug后程序运行结果为:

CDerived

我们通过解析上面的程序很容易发现,基类CBase引用了派生类CDerived的对象ODerived,因此调用的是ODerived中的虚函数SomeVirtualFunction

多态的作用

多态是面向对象语言的一个重要的性质,可以增强程序的可扩充性,即程序修改或增加功能时,减少代码修改量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值