千面多态:C++中的扮演大师

       在C++的世界中,多态如同一位“千面角色大师”,能够让同一段代码在不同场景中展现出截然不同的面貌。这种特性让程序更具灵活性与扩展性,使对象可以根据需求“变身”为合适的模样,完美适应复杂的编程需求。从基类到派生类,再到虚函数与动态绑定,C++的多态机制带来了代码复用和模块化的巨大优势。本文将带你深入探索这位“千面角色大师”的奥秘,揭开C++多态的神奇面纱。

1. 多态的概念及定义

    多态(Polymorphism)是一种面向对象的特性,核心在于同一接口在不同对象上具有不同的实现。简单来说,多态使得一个函数或方法可以表现出多种形态,这种机制让程序在运行时可以根据对象的类型来执行不同的操作。

1.1 多态的概念

        多态来源于希腊语“poly-”(多)和“-morph”(形状),字面意思就是“ 多种形态”。 。多态分为编译时多态(静态多态)运行时多态(动态多态),这里我们重点讲运行时多态。
    编译时多态(静态多态)主要就是我们前面讲的函数重载函数模板,他们传不同类型的参数就可以调用不同的函数,通过参数不同达到多种形态,之所以叫编译时多态,是因为他们实参传给形参的参数匹配是在编译时完成的,我们把编译时一般归为静态,运行时归为动态。
    运行时多态,具体点就是去完成某个行为(函数),可以传不同的对象就会完成不同的行为,就达到多种形态。比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是优惠买票(5折或75折);军人买票时是优先买票。再比如,同样是动物叫的⼀个行为(函数),传猫对象过去,就是”(>^ω^<) 喵“,传狗对象过去,就是"汪汪"。

1.2 多态的定义

    多态是⼀个继承关系的下的类对象,去调用同⼀函数,产生了不同的行为。比如Student继承了
Person。Person对象买票全价,Student对象优惠买票。
多态的实现关键在于:
(1)必须指针或者引用调用虚函数,并且 必须是基类的指针或引用 因为只有基类的指针或引用才能既指向派生类对象又指向基类对象。
 
(2)被调用的函数必须是虚函数派生类必须对基类的虚函数重写/覆盖,重写或者覆盖了,派生类才能有不同的函数,多态的不同形态效果才能达到

通过基类指针指向派生类对象,调用虚函数时会根据指向的对象类型执行相应的派生类方法,而不是基类中的方法。这一特性使得代码更加灵活和可扩展,便于后期维护和功能扩展。

2. 虚函数

2.1 虚函数简介

    虚函数(Virtual Function)是一种通过动态绑定(运行时绑定)来实现多态的机制,使得基类的指针或引用可以调用派生类的重写函数。虚函数通常在具有继承关系的类之间使用,为实现运行时多态提供了基础。

类成员函数前面加virtual修饰,那么这个成员函数被称为虚函数。注意非成员函数不能加virtual修饰。

class Person
{
public:
    virtual void BuyTicket() { cout << "买票-全价" << endl;}
};

在以上代码中,`func()`是一个虚函数,允许派生类重写这个函数的实现。在运行时,如果基类指针或引用指向派生类对象调用该函数时会执行派生类的重写版本,而不是基类的版本。

虚函数的优点

- 实现运行时多态:虚函数允许不同派生类通过重写基类函数实现不同的行为
- 提高代码的扩展性:可以定义一个通用接口,通过基类指针或引用操作不同的派生类。
- 保证正确的析构顺序:虚析构函数能够确保对象在被删除时

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值