C++基础:纯虚函数和抽象类

C++:虚函数的实现 前言 继承、封装、多态是C++作为OO语言的三大特性。在学习C++的过程中,我们都对虚函数机制实现多态有或多或少的了解。尽管在日常的编程中,我们可能掌握了虚函数的特性并熟练地将其运用在项目中又或者根本搞不来C++而对虚函数望而生畏。别慌!本文将从底层揭秘虚函数究竟是怎么操作的,在运行过程中究竟执行的是什么样的代码。话不多说,搞快点! 环境 操作系统:macOS Mojave 10.14.5 编译器:Apple LLVM version 10.0.1 (clang-1001.0.46.4) 工具:H 阅读详情

 C++基础:纯虚函数和抽象类

    纯虚函数是一种特殊的虚函数,它的一般格式如下:

    class <类名>
    {
        virtual <类型><函数名>(<参数表>)=0;
        …
    };

    在许多情况下,在基类中不能对虚函数给出有意义有实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。下面给出一个纯虚函数的例子。

    #include

    class point
    {
    public:
    point(int i=0, int j=0) { x0=i; y0=j; }
    virtual void set() = 0;
    virtual void draw() = 0;
    protected:
    int x0, y0;
    };

    class line : public point
    {
    public:
    line(int i=0, int j=0, int m=0, int n=0):point(i, j)
    {
        x1=m; y1=n;
    }
    void set() { cout<<"line::set() called./n"; }
    void draw() { cout<<"line::draw() called./n"; }
    protected:
    int x1, y1;
    };

    class ellipse : public point
    {
    public:
    ellipse(int i=0, int j=0, int p=0, int q=0):point(i, j)
    {
        x2=p; y2=q;
    }
    void set() { cout<<"ellipse::set() called./n"; }
    void draw() { cout<<"ellipse::draw() called./n"; }
    protected:
    int x2, y2;
    };

    void drawobj(point *p)
    {
    p->draw();
    }

    void setobj(point *p)
    {
    p->set();
    }

    void main()
    {
    line *lineobj = new line;
    ellipse *elliobj = new ellipse;
    drawobj(lineobj);
    drawobj(elliobj);
    cout<    setobj(lineobj);
    setobj(elliobj);
    cout<<"/nRedraw the object.../n";
    drawobj(lineobj);
    drawobj(elliobj);
    }

    抽象类

    带有纯虚函数的类称为抽象类。抽象类是一种特殊的类,它是为了抽象和设计的目的而建立的,它处于继承层次结构的较上层。抽象类是不能定义对象的,在实际中为了强调一个类是抽象类,可将该类的构造函数说明为保护的访问控制权限。

    抽象类的主要作用是将有关的组织在一个继承层次结构中,由它来为它们提供一个公共的根,相关的子类是从这个根派生出来的。

    抽象类刻画了一组子类的操作接口的通用语义,这些语义也传给子类。一般而言,抽象类只描述这组子类共同的操作接口,而完整的实现留给子类。

    抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。如果派生类没有重新定义纯虚函数,而派生类只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象类。如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体类了。

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

相关推荐

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

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

鬼谷子的博客 1206

析构函数可以是纯虚函数

在某些类里声明纯虚析构函数很方便。纯虚函数将产生抽象类——不能实例化的类(即不能创建此类型的对象)。有些时候,你想使一个类成为抽象类,但刚好又没有任何纯虚函数。怎么办?因为抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。  class awov {   public:   vi

1685

C++纯虚函数和抽象类

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

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

C++自考笔记

( a)年正式取名为C++     [A] 1983     [B] 1986     [C] 1978     [D] 1999 int类型占用(c)字节存储空间。     [A] 1     [B] 2     [C] 4     [D] 8 使用if—else语句嵌套最多可以实现(d)分支     [A] 1     [B] 2     [C] 4     [D] 无数多条 (b)循环语...

平凡的脚步也可以走完伟大的行程 2611

关于Win11安装Ubuntu子系统报错:WslRegisterDistribution failed with error 解决办法

Win11安装Ubuntu子系统报错:WslRegisterDistribution failed with error

qq_51908382的博客 3万+

vllm运行过程中出现cuda out of memory

将长序列分解为多个小块,每个块分别处理。这样可以减少单次 Prefill 的计算量和显存占用,从而优化 TTFT 和显存使用效率。考虑使用 CPU 卸载(如 --cpu-offload-gb),将部分缓存卸载到 CPU 内存中,扩展 GPU 的虚拟内存。在大语言模型中,当输入序列很长(例如超过 1024 个 Token)时,Prefill 阶段的计算量会非常大。最后增加了enable-chunked-prefill参数和max_num_batched_tokens解决了问题。参数来进一步优化性能。

盛世芳华 3516

C++:抽象基类和纯虚函数的理解

抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层。       ⑴抽象类的定义:       称带有纯虚函数的类为抽象类。       ⑵抽象类的作用:       抽象类的主要作用是将有关的操作作为结果接口组织在一个继承层次结构中,由它来为派生类提供一个公共的根,派生类将具体实现在其基类中作为接口的操作。所以派生类实际上刻画了一组子类的操作接口的通

铁匠Smith先生的专栏 1万+

从时序迷宫到稳定通信:FSMC配置中的时间参数深度解析与实战避坑指南

本文深入解析STM32 FSMC配置中的时间参数,特别是AddressSetupTime和DataSetupTime的实战配置技巧。通过STM32F407连接SRAM的实际案例,提供从理论计算到CubeMX配置的全流程指南,帮助开发者避免常见时序陷阱,确保稳定通信。

nginx7reverse的博客 82

C++基础:纯虚函数和抽象类

纯虚函数是一种特殊的虚函数,它的一般格式如下: class <类名> { virtual <类型><函数名>(<参数表>)=0; … }; 在许多情况下,在基类中不能对虚函数给出有意义有实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。下面给出一个纯虚函数的例子。...

weixin_30779691的博客 64

Winform零基础从入门到精通(3)——WinForm基础语法与事件机制详解

通过系统学习基础语法与事件机制,结合实际问题调试,可以快速掌握WinForm开发的核心技能。遇到问题时,优先检查事件绑定和异常处理,逐步培养代码规范意识。​安全转换字符串为数值,避免输入错误导致的崩溃。验证输入(如仅允许数字)​)传递事件相关数据。◦ 事件参数类型:​。

WangMing_X的博客 1492

内存优化--LOGBACK导致内存告警

一.故事背景 由于开辟新市场需要,开发了新的项部署在海外平台,其中最消耗内存的功能是消费kafka消息(最开始预计一天有1千万的量),部署完之后运行一段时间发现出现内存告警问题。 二.分析问题 出现内存告警,(新项目是低配置机器 2C4G * 2台)第一个念头是去查看堆空间设置的情况,看到jvm启动命令中堆空间都是直接指定大小,说明问题不是出在堆空间 -Xmx3g -Xms3g 先不管这些,去查看总的内存使用情况,发现总的内存空间使用将近有92% = 3.68G,那么这多出来使用的0.6

qq_33199919的博客 6052

C++基础#9:纯虚函数和抽象类的用法

纯虚函数和抽象类: 含有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。 定义纯虚函数就是为了让基类不可实例化化,因为实例化这样的抽象数据结构本身并没有意义.或者给出实现也没有意义 一. 纯虚函数在许多情况下,在基类中不能给出有意义的虚函数定义,这时可以把它说明成纯虚函数,把它的定义留给派生类来做。定义纯虚函数的一般形式为:c

记录和分享程序人生的点点滴滴 3634

【数据集】1980-2020年(5年)土地利用分类数据-中国科学院

简介1980-2020年每五年土地利用数据-中国科学院

WW、forever的博客 3933

c++基础10:继承和派生 虚函数的作用 多态性概念 纯虚函数和抽象类的概念

一.继承和派生 1.概念: 基类(父类):原有的类 派生类(子类):基于基类新建立的类 派生(类的派生):在原有类的基础上建立新类并且添加新特征的过程 继承:子类不加修改延续父类的特征   2.单一继承:子类只有一个基类的继承 多重继承:子类拥有多个基类的继承叫多重继承   3.使用冒号(:)来声明派生类(子类): class 子类:public 父类 {   } 上

烂笔头的专栏 1775

零基础入门篇③ PyCharm使用指南(个性化设置、开发必备插件、常用快捷键)

Python从入门到精通👉零基础入门篇③

hacker707的博客 4375

Ut接口原理及 VoLTE 补充业务自管理信令流程(GBA 引导认证+业务访问认证+ VoLTE 补充业务自管理)

2. Ut 接口及 VoLTE 业务子管理概述 2.1 UT 接口 —— VoLTE 终端补充业务配置 2.2终端通过 Ut 接口完成 VoLTE 补充业务自管理举例 2.3什么是 GBA 和 GAA 架构 2.4为什么要引入 GBA 架构认证及 BSF 网元 2.5UE(终端) 接口相关网元及功能 2.6GBA 架构流程概述 3. Ut 接口业务自管理信令流程 3.1 补充业务自管理及本文主要参考以下规范 3.2 Ut 接口业务自管理信令流程:查询补充业务 3.2.1 UE获

原来45的博客 1257

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

虚函数、纯虚函数以及抽象类的定义和它们之间的关系

echo47377的博客 237

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++基础笔记(七) 纯虚函数和抽象类

笔记来源:51CTO学习网站 C++基础笔记(七) 纯虚函数和抽象类 1.纯虚函数 -纯虚函数:指被标明为不具体实现的虚成员函数; virtual 类型 函数名(参数表)=0; -纯虚函数是在基类中为子类保留的一个位置,以便子类用自己的实在虚函数定义来重载。如果在基类中没有保留位置,则就不能重载; -纯虚函数是一个没有定义函数语句的基类虚函数,纯虚函数的值是0;派生类必须为每个基类纯虚函数提供一个...

weixin_44236290的博客 333

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

yuanchunsi的博客 6万+

STM32F407中文手册

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

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

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

m0_52656699的博客 1639

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

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

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

C++ 纯虚函数(抽象类)

含有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。

cpp_learner的博客 1878
上一篇: 高层模块不应该依赖于底层模块。二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象
下一篇: 真正理解面向接口编程
dadalan
博客等级 码龄20年 428粉丝 770原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值