面向对象特性

1.核心目标
面向对象设计核心:实现代码复用、提升程序扩展性,主要依靠继承和多态两大特性
2.两种复用形式
①继承(水平复用)
子类直接复用父类的成员变量与成员函数,无需重复编码
访问规则:子类可继承父类public/protected 成员,无法直接访问private成员
②多态(垂直复用)
借助父类指针/引用统一操作不同子类对象,编写通用逻辑,适配多种子类

多态前置基础

1.类型转换规则
安全:父类指针/引用指向子类对象
仅能直接访问父类原有成员,不能直接访问子类独有成员
不安全:子类指针/引用指向父类对象
极易引发内存越界、运行崩溃,禁止使用
2.作用
为多态提供语法基础,让一份代码可以操作多种子类
在这里插入图片描述

函数重写(覆盖)

1.概念
子类重新定义父类中已存在的同名函数;当父类函数逻辑无法满足子类需求时,就需要重写
2.重写硬性要求
函数名、返回值类型、参数列表必须和父类完全一致
3.附加用法
子类中可通过父类名::函数名()调用父类原函数,再拓展子类独有逻辑

多态概念与实现

1.多态定义
父类指针/引用指向子类对象,程序运行时根据对象真实类型,自动调用对应子类重写后的函数
2.实现条件(缺一不可)
①存在继承关系
②子类重写父类成员函数
③父类对应函数声明为虚函数(virtual)
④使用父类指针/引用指向子类对象调用函数
3.底层原理
依靠虚函数+动态绑定实现:编译时不确定调用哪个函数,运行时识别对象真实类型并匹配函数
4.多态价值
代码灵活、易扩展
新增子类时无需修改原有通用代码
在这里插入图片描述

纯虚函数&抽象类(多态进阶)

1.纯虚函数
定义格式: virtual 返回值 函数名 (参数)=0;
特点: 无函数实现体,仅作为统一接口规范
2.抽象类
包含至少一个纯虚函数的类,称为抽象类
规则:无法实例化(不能创建对象)
约束:继承抽象类的子类,必须重写纯虚函数,否则子类也会变成抽象类
3.作用
统一接口标准,强制所有子类实现指定功能
在这里插入图片描述

更多推荐