C++虚函数,纯虚函数和抽象类

C++纯虚函数和抽象类详解 摘要:C++中的纯虚函数和抽象类是面向对象编程的核心机制。纯虚函数通过在基类中声明"virtual 函数名=0"来定义,强制派生类必须实现该函数,否则派生类也会成为抽象类。抽象类不能实例化,主要用于定义接口规范。文章通过图形类、数据库连接等示例展示了纯虚函数和抽象类的实际应用,并介绍了虚析构函数、设计模式应用以及C++11/14的增强特性。合理使用这些特性能够构建灵活、可扩展的软件系统,是高质量C++代码的重要基础。 阅读详情

在说纯虚函数之前我们先说说虚函数,所谓的虚函数便是指当出现基类与派生类的同名操作时,需要给父类的函数标记上virtual,使之具有多态性。

语法:virtual 函数返回值类型 函数名(形参列表){函数实现}

此时要注意几个点:

1、虚函数是针对于非静态成员函数,因为静态成员函数属于类,是不能通过对象名访问的

2、对于类的构造函数也不能使用虚函数

3、虚函数是终身制的,父类使用virtual后,子类的同名函数不管加不加virtual,都是虚函数,一般建议大家加上

4、要多态调用虚函数,必须要有父类的指针或引用指向子类的对象

简单说完了虚函数,下面我们来说纯虚函数:

因为在父类中的虚函数的实现往往都是没有意义的,一般都是调用子类重写的函数,因此可以将虚函数改为纯虚函数
语法:virtual 返回值类型 函数名 (形参列表)=0;
当一个类只要有一个纯虚函数,这个类都称之为抽象类,同时如果大家把父类写为了抽象类但是又没有在子类中重写父类的虚函数的时候,此时子类也是一个抽象类,因为子类继承了父类的纯虚函数,相应的也就成了抽象类。

抽象类里的纯虚函数是可以有实现代码的,需要写在类的声明体外面。
抽象类的特点:
1、无法实例化对象
2、子类必须重写父类的纯虚函数,否则也无法实例化对象
 

#include <iostream>
using namespace std;

class father
{
public:
    virtual void func()=0;
};

class son1:public father
{
public:
    void func()
    {
        cout<<"son1-void func()"<<endl;
    }
};
void test01()
{
   //father f1;   //此时父类是无法实例化对象的
    father *f=new son1;
    f->func();
}
int main()
{
    test01();
    cout << "Hello world!" << endl;
    return 0;
}

原理还是一样的virtual指针,大家有疑问的可以参考之前的文章---------多态基本概念。

C++纯虚函数、抽象类和接口类 C++纯虚函数、抽象类和接口类 1.纯虚函数:纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在虚函数原型后加“=0” 例如:virtual void takeoff() = 0; 2.抽象类:含有纯虚函数的类叫做抽象类(抽象类不能实例化对象)。 3.接口类:一般只含有纯虚函数的类(故接口类属于抽象类)。接口类更多的用来表达一... 阅读详情

相关推荐

C++纯虚函数和抽象类

纯虚函数和抽象类 在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容 因此可以将虚函数改为纯虚函数 纯虚函数语法:virtual 返回值类型 函数名 (参数列表)= 0 ; 当类中有了纯虚函数,这个类也称为抽象类 抽象类特点: 无法实例化对象 子类必须重写抽象类中的纯虚函数,否则也属于抽象类 示例: class Base { public: //纯虚函数 //类中只要有一个纯虚函数就称为抽象类 //抽象类无法实例化对象 //子类必须重写父类中的纯虚函数,否则也属于抽象类

希望我的博客,能帮上你解决学习中工作中所遇到的问题 568

C++实验05(02)抽象类与纯虚函数

题目描述 定义一个抽象类Shape,有一个纯虚函数calArea(),返回值为double型。由Shape类派生出4种几何图形:Triangle、Rectangle、Square、Circle,各自新增的数据成员均为double型。 定义两个普通的重载函数fun():返回值均为void,形参分别是抽象类的对象指针、抽象类的对象引用,在函数中通过指针或引用调用虚函数calArea(),输出结果。 主...

多学习 3188

从理论到板级:FOC电机驱动硬件电路全链路设计解析

本文从硬件工程师视角,深度解析FOC电机驱动从理论到板级实现的全链路设计。重点剖析了电源保护、核心采样电路、三相逆变桥与驱动电路等关键硬件模块的设计要点与实战经验,强调硬件是FOC算法可靠运行的基石,并提供了PCB布局布线的核心原则,帮助开发者构建高性能、高可靠性的电机驱动硬件平台。

weixin_29240711的博客 333

【C++之纯虚函数与抽象类2】计算圆形、正方形、矩形、梯形和三角形的图形面积,并求和

题目要求: 写一个程序,定义抽象基类 Shape,由它派生出5个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。用虚函数分别计算几种图形面积,并求它们的和。要求用基类指针数组,使它每一个元素指向一个派生类对象。 ——谭浩强的《C++面向对象程序设计》第6章习题第5小题...............

霍喜猫的博客 5554

PADS Logic VX2.5元件绘制全流程:从零开始创建自定义元件库

本文详细介绍了在PADS Logic VX2.5中从零开始创建自定义元件库的全流程。内容包括理解PADS独特的四库分立结构、绘制原理图符号(CAE封装)、关联PCB封装、创建元件类型以及最终的调用验证。掌握元件绘制技能能从根本上提升设计效率、确保设计规范统一,并从源头杜绝原理图与PCB之间的关联错误,是硬件工程师必备的核心能力。

oo7890的博客 442

Miniforge3部署教程,完美替代Anaconda3

大背景不介绍了,哎!直接上教程!

zzy_ucas的博客 1万+

在C++中,要实现动态联编,必须使用(基类指针)调用虚函

LAKE521的专栏 1万+

mtk-drm commit送显流程(二):内核态atomic_commit实现解析

本文深入解析了mtk-drm框架中atomic_commit机制的内核态实现流程,详细介绍了从用户态触发到硬件提交的完整调用链,包括状态检查、硬件提交等关键阶段。特别分析了MTK平台在动态刷新率、内存带宽优化等方面的特有实现策略,为开发者提供了调试技巧和常见问题解决方案。

weixin_30839881的博客 1306

C++抽象类详解--纯虚函数,抽象类

在介绍抽象类之前,我们先介绍一下纯虚函数。1.纯虚函数  在基类中仅仅给出声明,不对虚函数实现定义,而是在派生类中实现。这个虚函数称为纯虚函数。普通函数如果仅仅给出它的声明而没有实现它的函数体,这是编译不过的。纯虚函数没有函数体。  纯虚函数需要在声明之后加个=0;class &lt;基类名&gt;{virtual &lt;类型&gt;&lt;函数名&gt;(&lt;参数表&gt;)=0; ......

NBDR_YL的博客 1987

肖特基二极管的反向恢复过程

本博客简述肖特基二极管反向恢复过程。

记得诚 1万+

Python李峋同款跳动的爱心(完整代码)

Python语言实现李峋同款可写字版跳动的爱心的完整代码。

AIGC 4万+

C++虚函数、纯虚函数和抽象类

文章目录1.虚函数2.纯虚函数3.抽象类 1.虚函数 虚函数是类中的一个函数成员,与其它函数成员的唯一区别是在子类中覆盖它。声明虚函数的方法很简单,只要在需要声明为虚函数的函数成员返回值类型之前加上virtual关键字。如: class A { private: int a; public: virtual void setA(int n) { //虚函数,需要在子类中将其覆盖 a = n; } }; 对于虚函数,编译器完成的是动态连编,即对函数的调用是在运行

hellolde的博客 242

Vue3 - 最新详细实现网站内部打开预览 office 全套附件,在页面弹窗内解析预览 word文档、excel电子表格、ppt演示文稿(docx|xlsx|pptx|pdf|txt等文件)完美兼容

vue3,nuxt3,下载预览,如何预览pdf文档,打开查看,office全套文档,实现在线预览文件,小程序内预览word文件,手机h5移动端网页,nuxt文档在线预览,预览office最好用的插件,office,文档,文件,查看预览,弹框预览,文档无法解析,打不开,报错,失效,保存下载,vue前端预览并下载doc、xls、pdf、txt及图片,下载查看,Office在线预览,vue-office,vue如何使用vue-office教程示例,word文档,ppt,exce表格,预览电子文件,vue在线预览

🏆 前端领域优质创作者 1万+

C++的虚函数、纯虚函数和抽象类

c++的虚函数,纯虚函数以及抽象类的理解与使用

weixin_44115575的博客 1741

万字长文,小白新手怎么开始做YOLO实验,从零开始教!整体思路在这里,科研指南针!

万字长文,小白新手怎么开始做YOLO实验,从零开始教!整体思路在这里,科研指南针!

Coding... 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++虚函数、纯虚函数、抽象函数、接口类、抽象类的区别和联系

虚函数、纯虚函数、抽象函数、接口类、抽象类是C++中实现多态和面向对象设计的重要概念。:接口类是一种特殊的抽象类,只包含纯虚函数(没有实现)和静态成员变量,不能包含普通成员函数和数据成员。:抽象类用于定义一个通用的框架或接口,强制派生类实现特定的功能。抽象类的目的是定义一个通用的框架,而不是提供完整的实现。:定义通用框架,提供部分实现,强制派生类实现特定功能。:没有默认实现(但可以有默认实现),派生类必须实现。:定义一组功能规范,强制派生类实现,实现松耦合。:纯虚函数用于定义接口,强制派生类实现该函数。

m0_52656699的博客 1639

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++:纯虚函数和抽象类 | 虚函数和纯虚函数区别

纯虚函数和抽象类 虚函数和纯虚函数区别

Sauron7i的博客 1213

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C++系列(纯虚函数和抽象类)

一个含有纯虚函数的类(抽象类)来说,其无法进行实例化 那么,纯虚函数是什么呢??从上面的定义可以看到,纯虚函数就是没有函数体,同时在定义的时候,其函数名后面要加上“= 0”。

yuanchunsi的博客 6万+

【C++】抽象类和虚基类,虚函数和纯虚函数

3.带纯虚函数的类叫虚基类,这种基类不能直接生成对象,而只有被继承,并重写虚函数后,才能使用,也叫抽象类,抽象类和虚继承基类还是有区别的,在C#中用abstract定义抽象类,在c++中有抽象类的概念,但是没有这个关键字。,其实在函数的前面加virtual是很好的,虽然牺牲了一些函数的性能,但是增加了面向对象的多态性,因为很难预料父类里面的这个函数不会在子类中去修改它的实现。1.类里面声明了虚函数,虚函数是可以定义的,还可以空定义。在一个抽象类中,只有方法类的集合,即只有纯虚函数的列就叫做接口。

weixin_52958292的博客 2467

【C++】纯虚函数和抽象类

什么是纯虚函数,纯虚函数的用处,什么是抽象类。为什么要有抽象类。

翼同学 955

【C++】多态 ⑪ ( 纯虚函数和抽象类 | 纯虚函数语法 | 抽象类和实现 | 代码示例 )

一、纯虚函数和抽象类 1、纯虚函数 2、纯虚函数语法 3、抽象类和实现 二、完整代码示例

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1991

C++ 纯虚函数和抽象类

C++中,可以将虚函数声明为纯虚函数,语法格式为: virtual 返回值类型 函数名 (函数参数) = 0; 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数。 最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。 包含纯虚函数的类称为抽象类(Abstract Class)。之所以说它抽象,是因为它无法实例化,也就是无法创建...

weixin_45743799的博客 244

c++的接口,纯虚函数,和抽象类

C++纯虚函数 一、定义 纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加"=0" virtual void funtion1()=0; 二、引入原因 1、为了方便使用多态特性,我们常常需要在基类中定义虚函数。 2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。 为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方..

xinlongkun的博客 772

c++ 不允许使用抽象类类型的对象_C++学习大纲:纯虚函数和抽象类

C++ 纯虚函数和抽象类1. 纯虚函数定义格式:在函数原型后面加上符号 “=0”class A{...public:virtual int f()=0;}2. 抽象类包含纯虚函数的类成为抽象类,用于为派生类提供一个基本框架和一个公共的对外接口,派生类(或派生类的派生类...),应对抽象基类的所有纯虚成员函数进行实现。(形式上跟Java的抽象类有点像,作用跟Java的接口有点像)——————————...

weixin_39824801的博客 1万+
上一篇: C++多态案例---计算器类
下一篇: PTA-6-1 多重继承
从一的
博客等级 码龄5年 1995粉丝 213原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值