C++ 多态性和虚函数
发布日期:2022-04-02 18:15:31
浏览次数:4
分类:博客文章
本文共 989 字,大约阅读时间需要 3 分钟。
2017-06-27 19:17:52
C++面向对象编程的一个重要的特性就是多态性,而多态性的实现需要依赖虚函数的帮助。
一、多态的作用:
- 隐藏实现细节,使得代码能够模块化;
- 接口重用,实现“一个接口,多种方法”;
二、虚函数的声明:
class Base
{
virtual 返回值类型 函数名(形参表){}
}
- 当基类的某个成员函数被声明为虚函数后,其子类中的函数如果返回值类型,函数名,形参表一致的话,不论是否加了virtual关键字,都会被认为是虚函数。反之,则是同名隐藏。
- virtual关键字只是在类中声明的时候必须加上,在类外定义的时候不需要加virtual关键字
- 构造函数,静态成员函数不能是虚函数,析构函数可以是虚函数,甚至鼓励将析构函数写成虚函数
- 只有通过基类的对象指针,基类的对象引用来调用派生类的虚函数,才能体现虚函数的特性。单纯通过子类来调用虚函数是无法体现这种动态联编的特性的。
A* p=&b
A& p=b
三、多态性的实现
可以使用基类的对象指针来先后指向同一类族中的不同类对象,以便使用相同的调用方法去调用不同派生类的同名虚函数。
class A{ int a;public: A(int x) { a=x; } virtual void get(){cout<<"A::"<<get(); p2->get(); return 0; }
四、纯虚函数
定义一个基类的时候如果还无法给出虚函数的具体实现方式,可以将之声明为纯虚函数,纯虚函数的实现完全依赖于各个派生类。
纯虚函数的声明:
virtual 返回值类型 函数名(形参表)=0;
- 因为无法给出纯虚函数的定义所以没有函数体,没有函数体和函数体为空是两个概念,要加以区分;
- 函数名赋值为0,本质上是将指向该函数的指针的地址赋值为0。在派生类没有重定义之前是无法加以使用的。
五、抽象类
抽象类是指无法定义对象只能作为基类的一种特殊的类,但是可以定义对象指针,目的是为了实现多态性。
抽象类有两种:
- 有纯虚函数的基类
- 构造函数或者析构函数被定义为protected访问
转载地址:https://www.cnblogs.com/hyserendipity/p/7086759.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月13日 22时48分02秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
babylonjs 设置面板位置_babylonjs 空间坐标转为屏幕坐标
2019-04-21
oracle 查询中用case,oracle case when 在查询时候的用法。
2019-04-21
oracle正在运行的程序包,ORACLE PL/SQL编程详解之程序包的创建与应用
2019-04-21
php局部页面滚动,在访问另一页面后保留浏览器滚动位置 - php
2019-04-21
linux服务器怎么添加站点,如何增加站点或虚拟主机及文件说明
2019-04-21
linux系统输入指令,Linux系统基础 - 基本操作命令
2019-04-21
linux设备管理命令,Linux命令(设备管理).doc
2019-04-21
linux 中文utf-8转gbk编码,Linux平台下 GBK编码转UTF-8编码
2019-04-21
linux安装软件在boot,在Linux系统上安装Spring boot应用的教程详解
2019-04-21
取消linux自动登录,linuxdeepin 如何取消自动登录啊?
2019-04-21
linux线程存储,Linux系统编程手册:线程:线程安全和每线程存储
2019-04-21
linux批处理模式,巧用linux-top的批处理模式
2019-04-21
linux信号量机制例题,第二章 信号量机制及几个经典例题
2019-04-21
linux ba 模拟,在你的 Python 游戏中模拟引力 | Linux 中国
2019-04-21
c语言表达式3649的值是,535个C语言经典实例目录.doc
2019-04-21