C++纯虚函数

2023-10-31

在成员函数的形参后面写上=0,则成员函数为纯虚函数。

纯虚函数声明:
virtual 函数类型 函数名 (参数表列) = 0;

class Person
{
   virtual void Display () = 0; // 纯虚函数
protected :
   string _name ; // 姓名
};
class Student : public Person
{};

注意:
(1)纯虚函数没有函数体;
(2)最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是虚函数”;
(3)这是一个声明语句,最后有分号。
纯虚函数只有函数的名字而不具备函数的功能,不能被调用。
纯虚函数的作用是在基类中为其派生类保留一个函数的名字,以便派生类根据需要对他进行定义。如果在基类中没有保留函数名字,则无法实现多态性。
如果在一个类中声明了纯虚函数,在其派生类中没有对其函数进行定义,则该虚函数在派生类中仍然为纯虚函数。

抽象类:

不用定义对象而只作为一种基本类型用作继承的类叫做抽象类(也叫接口类),凡是包含纯虚函数的类都是抽象类,抽象类的作用是作为一个类族的共同基类,为一个类族提供公共接口,抽象类不能实例化出对象。
纯虚函数在派生类中重新定义以后,派生类才能实例化出对象。
总结:
1、派生类重写基类的虚函数实现多态,要求函数名、参数列表、返回值完全相同。(协变除外)
2、基类中定义了虚函数,在派生类中该函数始终保持虚函数的特性。
3、只有类的非静态成员函数才能定义为虚函数,静态成员函数不能定义为虚函数。
4、如果在类外定义虚函数,只能在声明函数时加virtual关键字,定义时不用加。
5、构造函数不能定义为虚函数,虽然可以将operator=定义为虚函数,但最好不要这么做,使用时容易混淆
6、不要在构造函数和析构函数中调用虚函数,在构造函数和析构函数中,对象是不完整的,可能会出现未定义的行为。
7、最好将基类的析构函数声明为虚函数。(析构函数比较特殊,因为派生类的析构函数跟基类的析构函数名称不一样,但是构成覆盖,这里编译器做了特殊处理)
8、虚表是所有类对象实例

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++纯虚函数 的相关文章

  • 如何在MVVM中管理多个窗口

    我知道有几个与此类似的问题 但我还没有找到明确的答案 我正在尝试深入研究 MVVM 并尽可能保持纯粹 但不确定如何在坚持模式的同时启动 关闭窗口 我最初的想法是向 ViewModel 发送数据绑定命令 触发代码来启动一个新视图 然后通过 X
  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke

随机推荐

  • Redis7高级之缓存双写一致性之更新策略探讨(三)

    1 缓存双写一致性 如果redis中有数据 需要和数据库中的值相同 如果redis中无数据 数据库中的值是最新值 且准备回写redis 缓存按照操作分 只读缓存 读写缓存 同步直写策略 写数据库后也同步写 redis 缓存 缓存中的数据和数
  • 微信远程代码执行漏洞(最新版本利用)-亲测已上线

    目录 POC index html exp js 测试总结 最新版微信利用方式 最新版存在 web安全学习了解 web渗透测试 官网 宣紫科技 POC index html exp js ENABLE LOG true IN WORKER
  • Java如何将String转换成json对象或json数组

    导包
  • 安装MySQL提示cab文件损坏_安装所需的 CAB 文件“Redist.cab”已损坏处理办法

    近日为客户调试sql server 2008时意外的然出现两个报错 结果导致部分功能组件无法安装成功 如下 产品 Microsoft SQL Server 2008 联机丛书 简体中文 错误 1335 此安装所需的 CAB 文件 Redis
  • recvfrom vs2010 debug正常 realse错误10040

    学习socket程序 udp多播发送和接收 其中一个接收recvfrom函数 在debug能正常运行 在release无法运行 总是提示10040错误 查询百度 说是接收缓存区不够 下面是程序代码 void MultiSock RecvPa
  • iOS设备、Icon、LaunchImage、图片分辨率

    摘要 iOS的各种设备的分辨率 以及开发用的Icon LaunchImage的分辨率 文中所有数据均来自网络 及博主个人总结 如有错误 以官方数据为准 iOS设备 iOS设备的屏幕的大小 分辨率以及比例因数 Scale Factor 1 i
  • 4-1单链表逆转

    学习完链表以后 在刷PTA的时候 遇见第一题就卡壳了 真是悲哀 是一道关于单链表逆转的 其实还是很简单的 不过因为搞错了位置 再加上其他函数也是第一次用C写 输出的一直是NULL 就把这段代码敲出来方便大家以后看 4 1 单链表逆转 20分
  • 计算机网络---应用层(http协议)

    目录 一 简单理解序列化和反序列化 1 什么是序列化 反序列化 2 网络版计算器程序 二 HTTP协议 1 认识URL 2 http协议格式 3 http方法及http状态码 4 http的特征 三 简单的http协议程序 在tcp ip五
  • kong添加自定义插件(一)

    api网关kong支持自定义插件 但是如何添加一个自定义的插件 通过admin api 添加一个kong原有的plugin curl命令方式 curl i X POST url http 192 168 74 111 8001 routes
  • 技术人员的赚钱之道-10:程序员会不会成为新时代的无产者?

    曾经是革命者用革命打倒的东西 正是革命者后辈们追逐 推崇的东西 观念不转 思维不变 程序员很可能成为新时代的无产者
  • 构造函数与析构函数不能被继承

    不是所有的函数都能自动地从基类继承到派生类中的 构造函数和析构函数是用来处理对象的创建和析构的 它们只知道对在它们的特殊层次的对象做什么 所以 在整个层次中的所有的构造函数和析构函数都必须被调用 也就是说 构造函数和析构函数不能被继承 子类
  • 帮我随便用java写一个用户登陆接口

    我可以给你提供一些基本的示例代码 你可以使用Java语言来实现用户登录接口 public class Login private String username private String password public Login St
  • Javadoc简单使用教程

    Javadoc深入浅出 前言 Java简介和安装 Java简介 Java环境安装 Javadoc 什么是Javadoc Javadoc使用方法 最简单的例子 Javadoc常用标记 Javadoc规范 实际开发中javadoc的使用 Jav
  • 安全工作中WSL替代vmware的全套方案

    前言 由于我的破thinkpad x1 carbon只有500g的磁盘 在面对所需要用到多台vmware虚拟机 Kali Linux Ubuntu 16 04 Ubuntu 18 04 Ubuntu 20 04 Ubuntu 22 04 时
  • linux 内核等待队列机制原理分析

    1 等待队列数据结构 等待队列由双向链表实现 其元素包括指向进程描述符的指针 每个等待队列都有一个等待队列头 wait queue head 等待队列头是一个类型为wait queque head t的数据结构 struct wait qu
  • C~数据类型

    在 C 语言中 数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统 变量的类型决定了变量存储占用的空间 以及如何解释存储的位模式 类型分类 基本类型 它们是算术类型 包括两种类型 整数类型和浮点类型 枚举类型 它们也是算术类型 被用
  • Unity3D Timeline 工作流

    一 前言 这是Timline学习系列的第二篇 本节内容主要讲解Timeline基本的工作流程 通过本章 你将学会如何创建Timeline 如何用Timeline来制作动画 以及使用humanoid动画等知识 本章主要包含下列5个小节的内容
  • SpringEvent事件监听、事件驱动,观察者模式

    文章目录 一 SpringEvent也叫做事件监听 事件驱动 1 1主要成员 1 1 1EventDtoPush事件生产者 该类属于开发范畴 1 1 2EventDtoListener事件生产者 该类属于开发范畴 1 1 3Applicat
  • non-login shell/login shell

    linux 环境配置文件 bashrc 为每一个运行bash shell的用户执行此文件 当bash shell被打开时 该文件被读取 bashrc文件主要保存个人的一些个性化设置 如命令别名 路径等 也即在同一个服务器上 只对某个用户的个
  • C++纯虚函数

    在成员函数的形参后面写上 0 则成员函数为纯虚函数 纯虚函数声明 virtual 函数类型 函数名 参数表列 0 class Person virtual void Display 0 纯虚函数 protected string name