一、章节核心定位
多态是 C++ 面向对象三大核心特性(封装、继承、多态)的最后一环,依托继承机制实现,核心目标是同一个接口,不同实现,大幅提升代码扩展性与复用性,本章分为运算符重载、虚函数、抽象类三大模块。
二、运算符重载
重载底层机制:运算符本质是语法糖,重载就是给运算符赋予自定义类的运算逻辑,编译器依据操作数类型匹配对应重载函数。
重载约束规则:不能修改运算符优先级、结合性、操作数个数;少数运算符(如::、.、sizeof)禁止重载。
两种重载实现方式
友元函数重载:适合双目运算符,可直接访问类私有成员,无需依赖调用对象;
成员函数重载:单目运算符首选,左操作数固定为当前类对象,仅需传右操作数参数。
典型重载场景:算术运算符+、关系运算符==、流运算符<</>>、自增自减++/–等,是自定义类实现直观运算的基础。
三、虚函数与动态联编
联编区分
静态联编(早绑定):编译期确定函数调用地址,普通成员函数默认采用,执行效率高;
动态联编(晚绑定):运行时依据对象真实类型匹配函数,由虚函数实现,是多态核心。
虚函数定义与使用:基类函数加virtual关键字即为虚函数,派生类重写同名同参函数自动成为虚函数;通过基类指针 / 引用操作派生类对象时,会调用派生类重写版本。
虚析构函数:基类析构函数必须声明为virtual,否则用基类指针释放派生类对象时,只会调用基类析构,造成派生类内存泄漏。
四、抽象类
纯虚函数:格式virtual 返回值 函数名() = 0;,无函数体,仅提供接口规范。
抽象类特性:包含至少一个纯虚函数的类无法实例化,仅能作为父类定义通用接口;派生类必须重写所有纯虚函数,才能成为可创建对象的具体类。
对象指针数组:定义基类指针数组,存储各类派生类对象,循环调用虚函数,统一处理不同子类逻辑,是多态最常用工程写法。
五、章节总结
多态让代码做到 “接口统一,实现分离”:运算符重载简化自定义类操作;虚函数实现运行时多态;抽象类强制子类遵循统一接口规范。开发中可基于一套父类接口拓展无数子类,无需修改原有业务代码,完美契合面向对象开闭原则。

更多推荐