C++ 多态性和虚函数
发布日期:2022-04-02 18:15:31 浏览次数:4 分类:博客文章

本文共 989 字,大约阅读时间需要 3 分钟。

2017-06-27 19:17:52

C++面向对象编程的一个重要的特性就是多态性,而多态性的实现需要依赖虚函数的帮助。

一、多态的作用:

  1. 隐藏实现细节,使得代码能够模块化;
  2. 接口重用,实现“一个接口,多种方法”;

二、虚函数的声明:

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。在派生类没有重定义之前是无法加以使用的。

五、抽象类

抽象类是指无法定义对象只能作为基类的一种特殊的类,但是可以定义对象指针,目的是为了实现多态性。

抽象类有两种:

  1. 有纯虚函数的基类
  2. 构造函数或者析构函数被定义为protected访问

 

转载地址:https://www.cnblogs.com/hyserendipity/p/7086759.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C++ 利用栈解决运算问题
下一篇:C++继承与派生

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月13日 22时48分02秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

babylonjs 设置面板位置_babylonjs 空间坐标转为屏幕坐标 2019-04-21
oracle里面如何查询sqlid,CSS_oracle中如何查看sql, --查询表状态:  select uo.O - phpStudy... 2019-04-21
oracle 查询中用case,oracle case when 在查询时候的用法。 2019-04-21
oracle正在运行的程序包,ORACLE PL/SQL编程详解之程序包的创建与应用 2019-04-21
php局部页面滚动,在访问另一页面后保留浏览器滚动位置 - php 2019-04-21
jmeter运行linux命令行,Jmeter在linux上运行(命令行运行Jmeter) 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进入用户user1主目录,Linux系统命令提示符为[user1@localhost root]当前用户所在目录为( )... 2019-04-21
取消linux自动登录,linuxdeepin 如何取消自动登录啊? 2019-04-21
linux线程存储,Linux系统编程手册:线程:线程安全和每线程存储 2019-04-21
linux以root账号登陆gnome,CentOS 7 - 以root身份登入Gnome 2019-04-21
linux crontab 备份数据库 空文件,Linux下使用crontab自动备份数据库 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