返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ 纯虚函数详解
  • 432
分享到

C++ 纯虚函数详解

2024-04-02 19:04:59 432人浏览 泡泡鱼
摘要

目录虚函数 纯虚函数总结虚函数  在基类中将一个函数声明为虚函数,使该函数具有虚属性,那么其所有派生函数中该函数的重写都具备了虚属性,也就使得基类指针可以调用派生

虚函数 

在基类中将一个函数声明为虚函数,使该函数具有虚属性,那么其所有派生函数中该函数的重写都具备了虚属性,也就使得基类指针可以调用派生类实例中继承自该基类的所有成员函数,且若有重写,调用的都是重写后的函数。

纯虚函数

声明纯虚函数可使当前类变成抽象类,禁止该类被实例化,并要求其非抽象类的派生类必须实现该函数。

下面展示虚函数和纯虚函数的代码示例,注意观察注释内容:


class Base
{
public:
	virtual void print() = 0;//纯虚函数,可以有函数体,可实例化的派生类必须重写它
	virtual void play() {//虚函数,有函数体,若派生类没有重写它,就原样继承下来
		cout << "Base play!" << endl;
	}
	virtual ~Base() = 0;//纯虚析构函数,必须要有函数体
	//virtual ~Base(){}	//很多情况下,基类的虚函数都会有函数体,将析构函数声明为纯虚函数是一种抽象化基类、不许其实例化的一种方法。
};
void Base::print() {
    //被声明为纯虚函数,仍可以有函数体
    //但派生类若想实例化,必须重写纯虚函数,派生类中可以调用基类有函数体的纯虚函数(Base::print())
	cout << "Base print!" << endl;
}
Base::~Base(){
    //被声明为纯虚析构函数,根据c++类的规则,因为其派生类析构函数会调用基类的析构函数,所以必须有函数体,否则不知道你执行了啥
}

1、纯虚函数对类最大的束缚就是:类中一旦出现纯虚函数,就不可实例化了;

2、纯虚函数还是可以有函数体,只不过最终还是要被派生类重写,在派生类的函数中可以调用基类中有函数体的纯虚函数;

3、为使派生类能完全释放资源,基类析构函数必须声明为虚函数,否则,在用基类指针new一个派生类对象后,delete该指针就只能回收与基类相关的资源,造成内存泄漏;

4、纯虚析构函数必须要有函数体,根据C++析构函数的调用规则,派生类会调用基类析构函数,如果基类析构函数没有函数体会造成函数调用失败而报错,这是纯虚析构函数与普通纯虚函数不同之处。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: C++ 纯虚函数详解

本文链接: https://lsjlt.com/news/136978.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++ 纯虚函数详解
    目录虚函数 纯虚函数总结虚函数  在基类中将一个函数声明为虚函数,使该函数具有虚属性,那么其所有派生函数中该函数的重写都具备了虚属性,也就使得基类指针可以调用派生...
    99+
    2024-04-02
  • C++ 虚函数与纯虚函数代码详解
    目录什么是虚函数:虚函数的注意事项:存虚函数总结什么是虚函数: 虚函数 是在基类中使用关键字 virtual 声明的函数,在C++ 语言中虚函数可以继承,当一个成员函数被声明为虚函数...
    99+
    2024-04-02
  • C++中纯虚函数的实例详解
    目录虚函数和纯虚函数附:纯虚函数的应用总结虚函数和纯虚函数 之前学过虚函数,语法:virtual 返回值类型 函数名(参数列表),然后这个类也就变成的虚基类,然后子类重写父类的虚函数...
    99+
    2024-04-02
  • C++ 虚函数及虚函数表详解
    多态”的关键在于通过基类指针或引用调用一个虚函数时,编译时不确定到底调用的是基类还是派生类的函数,运行时才确定。 #include <iostream> using ...
    99+
    2024-04-02
  • C++ 虚函数与纯虚函数的使用与区别
    目录什么是虚函数:虚函数的注意事项:纯虚函数纯虚函数的注意事项:虚函数与纯虚函数区别什么是虚函数: 虚函数 是在基类中使用关键字 virtual 声明的函数,在C++ 语言中虚函数...
    99+
    2024-04-02
  • C++中虚函数与纯虚函数的区别有哪些
    小编给大家分享一下C++中虚函数与纯虚函数的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是虚函数:虚函数 是在基类中使用关键字 virtual 声...
    99+
    2023-06-20
  • C++ typeid 和虚函数详解
    目录typeid 和虚函数总结typeid 和虚函数 前面咱们讲到 typeid 的操作返回值是 type_info 对象的引用,然后输出返回值的地址是相同的,测试代码如下: #...
    99+
    2024-04-02
  • c++虚函数和纯函数的区别是什么
    C++中的虚函数和纯虚函数都是用来实现多态性的机制,但它们有一些不同之处。 虚函数是在基类中声明的,可以在派生类中进行重写,它允许在...
    99+
    2023-10-26
    c++
  • 详解C++虚函数表存储位置
    目录前言反汇编相近地址前言 先说结论:虚函数表存储在只读数据段(.rodata)、虚函数存储在代码段(.text)、虚表指针的存储的位置与对象存储的位置相同,可能在栈、也可能在堆或数...
    99+
    2023-05-14
    C++虚函数表存储位置 C++虚函数表存储 C++虚函数表
  • C/C++中虚函数详解及其作用介绍
    目录概述使用方法关联静态关联动态关联案例1未使用虚函数使用虚拟类案例2总结概述 虚函数 (virtual function) 指可以被子类继承和覆盖的函数. 使用方法 基类声明成员...
    99+
    2024-04-02
  • C++学习之虚函数表与多态详解
    目录概述C++虚函数表指针和虚函数表C++ 虚函数表和多态概述 C++的多态在不同环境下实现方式可能不一样,虚函数表是C++实现多态的一种方式。 问题: 什么情况下C++会使用虚指针...
    99+
    2023-05-14
    C++虚函数表 多态 C++虚函数表 C++ 多态
  • C++ 虚拟函数详解:解答多态机制之谜
    c++++虚拟函数是实现多态性的关键,它允许派生类覆盖父类的行为:声明为虚函数,并在派生类中出现。调用时,编译器根据对象类型动态解析正确的函数版本。纯虚函数强制派生类提供自己的实现,以实...
    99+
    2024-04-29
    c++ 多态
  • C++ 函数调试详解:如何调试虚函数中的问题?
    虚函数调试方法:设置断点单步执行;使用 assert() 验证条件;利用调试器工具检查动态类型、函数栈和重新定义虚函数。 C++ 函数调试详解:如何调试虚函数中的问题? 引言 在 C+...
    99+
    2024-05-02
    c++ 虚函数 函数调试
  • c++虚函数与虚函数表原理
    目录1.什么是虚函数2.虚函数会影响类的内存3.了解虚函数表--->通过虚函数表的指针去访问数据4.虚函数声明1.什么是虚函数 用virtual 修饰的成员函数叫虚函数 小知识...
    99+
    2024-04-02
  • C++lambda函数详解
    目录Lambda 表达式基础1. 值捕获2. 引用捕获3. 隐式捕获4. 表达式捕获泛型 Lambda函数对象包装器Lambda 表达式 Lambda 表达式是现代 C++ 中最重要...
    99+
    2023-02-13
    C++ lambda表达式 C++ lambda函数
  • C++ 虚函数表图文解析
    一、前言 一直以来,对虚函数的理解仅仅是,在父类中定义虚函数,子类中可以重写该虚函数,并且父类指针可以指向子类对象,调用子类的虚函数(多态)。在读研阶段经历的几个项目中,自己所写的类...
    99+
    2024-04-02
  • C++ 函数重载和函数虚函数
    答案: c++++ 中的函数重载和函数虚函数允许开发者创建具有相同名称但不同参数列表或行为的函数。详细描述:函数重载: 创建具有相同名称但不同参数列表的函数,用于在不同情况下使用具有相似...
    99+
    2024-04-15
    c++ 函数重载 函数虚函数
  • 详解C++虚函数中多态性的实现原理
    目录什么是虚函数多态性的实现多态的底层原理多态性的好处总结在面向对象的编程中,多态性是一个非常重要的概念。多态性意味着在不同的上下文中使用同一对象时,可以产生不同的行为。C++是一种...
    99+
    2023-05-19
    C++虚函数的多态性原理 C++虚函数 多态性 C++虚函数
  • C++函数指针详解
    函数指针基础: 1. 获取函数的地址 2. 声明一个函数指针 3.使用函数指针来调用函数 获取函数指针: 函...
    99+
    2024-04-02
  • C#构造函数详解
    一、简介 构造函数,基本用法是在类对象声明的时候完成初始化工作。 二、实例构造函数 1、构造函数的名字与类名相同。 2、使用 new 表达式创建类的对象或者结构(例如int)时,会调...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作