漂亮的博客网站模板,装修公司网站开发,wap的网站模板下载,网站用社交图标做链接侵权吗多态的基本语法
多态分为两类
静态多态: 函数重载 和 运算符重载属于静态多态#xff0c;复用函数名动态多态: 派生类和虚函数实现运行时多态
静态多态和动态多态区别#xff1a;
静态多态的函数地址早绑定 - 编译阶段确定函数地址动态多态的函数地址晚绑定 - 运行阶段确…多态的基本语法
多态分为两类
静态多态: 函数重载 和 运算符重载属于静态多态复用函数名动态多态: 派生类和虚函数实现运行时多态
静态多态和动态多态区别
静态多态的函数地址早绑定 - 编译阶段确定函数地址动态多态的函数地址晚绑定 - 运行阶段确定函数地址
下面通过案例进行讲解多态 多态满足条件 1、有继承关系 2、子类重写父类中的虚函数 多态使用 父类指针或引用指向子类对象
重写函数返回值类型 函数名 参数列表 完全一致称为重写 未发生重写时子类虚函数表完全复制父类重写发生时子类重写的函数会把原父类的覆盖
多态案例一-计算器类
案例描述
分别利用普通写法和多态技术设计实现两个操作数进行运算的计算器类
多态的优点
代码组织结构清晰可读性强利于前期和后期的扩展以及维护
示例 总结C开发提倡利用多态设计程序架构因为多态优点很多
纯虚函数和抽象类
在多态中通常父类中虚函数的实现是毫无意义的主要都是调用子类重写的内容
因此可以将虚函数改为纯虚函数,目的是强制让你重写函数
纯虚函数语法virtual 返回值类型 函数名 参数列表 0 ;
当类中有了纯虚函数这个类也称为抽象类
抽象类特点
无法实例化对象子类必须重写抽象类中的纯虚函数否则也属于抽象类
示例
多态案例二-制作饮品
案例描述
制作饮品的大致流程为煮水 - 冲泡 - 倒入杯中 - 加入辅料
利用多态技术实现本案例提供抽象制作饮品基类提供子类制作咖啡和茶叶
示例
虚析构和纯虚析构
多态使用时如果子类中有属性开辟到堆区那么父类指针在释放时无法调用到子类的析构代码
解决方式将父类中的析构函数改为虚析构或者纯虚析构
虚析构和纯虚析构共性
可以解决父类指针释放子类对象都需要有具体的函数实现
虚析构和纯虚析构区别
如果是纯虚析构该类属于抽象类无法实例化对象
虚析构语法
virtual ~类名(){}
纯虚析构语法
virtual ~类名() 0;
类名::~类名(){}
示例
不加virtual: 虚析构 纯虚构 有时候直接delete有时候还要Null??????? 析构函数中释放堆区内存才需要
if (m_mem ! NULL) { delete m_mem; m_mem NULL; }