C++抽象类

概念

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类(即:包含至少一个纯虚函数的类)称为抽象类,它不能生成对象。派生自抽象类的类必须实现纯虚函数或者它们必须也是抽象类。

抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
参考来源

class Account {
public:Account( double d );   virtual double GetBalance();   virtual void PrintBalance() = 0;   
private:double _balance;
};

此声明与上一个声明的唯一区别是,PrintBalance 是用 pure 说明符 (= 0) 声明的。

抽象类特点

  1. 抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误;

  2. 抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们;

  3. 重要的是抽象类可以包括抽象方法,这是普通类所不能的,但同时也能包括普通的方法。

限制

  • 变量或成员数据

  • 显式转换的类型

  • 自变量类型

  • 显式转换的类型

  • 函数返回类型

可以为抽象类定义纯虚函数,但是只能通过使用以下语法直接调用:

抽象类名称::函数名称()

这有助于设计基类包括纯虚析构函数的类层次结构,因为在销毁对象的过程中始终会调用基类析构函数。请考虑以下示例:

// 用纯虚函数声明一个抽象基类.
// deriv_RestrictionsonUsingAbstractClasses.cpp
class base {
public:base() {}virtual ~base()=0;
};// Provide a definition for destructor.
base::~base() {}class derived:public base {
public:derived() {}~derived(){}
};int main() {derived *pDerived = new derived;delete pDerived;
}

删除 pDerived 指向的对象时,将调用类 derived 的析构函数,然后调用类 base的析构函数。纯虚函数的空实现确保至少函数的某个实现存在。

在前面的示例中,纯虚函数 base::~base 是从 derived::~derived 隐式调用的。

也可使用完全限定的成员函数名称显式调用纯虚函数。

参考链接

C++接口与抽象类

接口是一个概念。它在C++中用抽象类来实现,在C#和Java中用interface来实现。

与抽象类的关系

  • 包含未实现的方法声明;

  • 不能实例化;

  • 派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)。

与抽象类的区别

- 抽象类当中可以存在非抽象的方法,可接口不能,且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。

  • 抽象类是对象的抽象,然而接口是一种行为规范。

  • 抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。

  • 接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法; 而类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338586.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tibco_TIBCO产品的微服务和DevOps

tibco大家都在谈论微服务 ,这些天。 您可以在数百篇文章和博客文章中读到很多有关微服务的信息。 马丁福勒 ( Martin Fowler )的文章是一个很好的起点,该文章引发了有关这种新架构概念的大量讨论。 另一个不错的资源是独立于供应…

C atoi函数

作用atoi()函数将数字格式的字符串转换为整数类型。例如,将字符串1253124127转换成数字1253124127。注意首要注意atoi函数可以转化如下这种字符串1fdafhdjfhkas关于参数的注意事项,atoi()函数的参数是要转换的字符串。该字符串的格式为[空格][符号][数字…

开式蓄冷罐与闭式蓄冷罐_一罐将其全部统治:Arquillian + Java 8

开式蓄冷罐与闭式蓄冷罐借助Java 8 ,已实现了许多新的语言改进,以简化开发人员的生活。 在我看来, Java 8的最大优点之一是,在某些情况下,已开发的代码看起来比使用以前的方法更漂亮,我指的是Lambdas和Meth…

C 预处理指令

C 预处理指令C语言、C 语言的预处理器。用于在编译器处理程序之前预扫描源代码,完成头文件的包含, 宏扩展, 条件编译, 行控制(line control)等操作编译的四个阶段C语言标准规定,预处理是指前4个编译阶段(phases of tra…

将html代码转换为dom,将HTML字符转换为DOM节点并动态添加到文档中

将HTML字符转换为DOM节点并动态添加到文档中将字符串动态转换为DOM节点,在开发中经常遇到,尤其在模板引擎中更是不可或缺的技术。字符串转换为DOM节点本身并不难,本篇文章主要涉及两个主题:1 字符串转换为HTML DOM节点的基本方法及…

通过Spring集成进行消息处理

Spring Integration提供了Spring框架的扩展,以支持著名的企业集成模式。 它在基于Spring的应用程序中启用轻量级消息传递,并支持与外部系统的集成。 Spring Integration的最重要目标之一是为构建可维护且可测试的企业集成解决方案提供一个简单的模型。 …

鸿蒙系统多会发布,华为官宣鸿蒙系统将发布,还将发布多款新品

华为今日官宣,6月2日20:00,将举行鸿蒙操作系统及华为全场景新品发布会。【1、鸿蒙OS2.0】本次发布会的重点将是推出华为今年的重点战略产品——鸿蒙系统。届时鸿蒙OS2.0正式版将陆续推送给手机用户。5月中旬时华为就先行推送了一波鸿蒙OS开发…

C语言结构体字节对齐

默认字节对齐C语言结构体字节对齐是老生常谈的问题了,也是高频面试题,现在我们来深入研究这个问题,彻底弄懂到底是怎么回事,给你一个结构体定义和平台机器位数就能手动计算出结构体占用字节数,现在我们不使用宏#pragma…

meetup_使用RxNetty访问Meetup的流API

meetup本文将涉及多个主题:响应式编程,HTTP,解析JSON以及与社交API集成。 完全在一个用例中:我们将通过非夸张的RxNetty库实时加载和处理新的metup.com事件,结合Netty框架的强大功能和RxJava库的灵活性。 Meetup提供了…

html约束验证的例子,HTML5利用约束验证API来检查表单的输入数据的代码实例

HTML5对于表单有着极大程度的优化,无论是语义,小部件,还是数据格式的验证。我猜你肯定会以浏览器兼容作为借口不愿意使用这些“新功能”,但这绝不应该成为使你停滞不前的原因,况且还有像Modernizr和ployfill这样的工具…

C语言经典题(1)

输入某年某月某日,判断这一天是这一年的第几天?程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天#include int mai…

C语言面试-指针和引用的使用场景?

先解决两个疑问◆ 指针和引用的不同之处是什么?◆ 何时用用指针?何时用引用?指针和引用的不同之处看如下代码:指针是用来表示内存地址的,而指针这个整数正是被指向的变量地址。而引用就是给变量重新起了一个名字&#…

C语言指针变量与一维数组

数组元素之间的地址是相连的;变量地址绝对不是相连的,如果找到规律那也只是一个偶然的,不是必然的;1. 指针变量和一位数组下面对指针数组进行分析,index(小标是从0开始),array数组是int类型,每一…

input发送a.jax_JAX-RS 2.0:服务器端处理管道

input发送a.jax这篇文章的灵感来自JAX-RS 2.0规范文档 (附录C)中的Processing Pipeline部分。 我喜欢它的原因在于它提供了JAX-RS中所有模块的漂亮快照-以准备好吞咽的胶囊形式! 礼貌– JAX-RS 2.0规范文档 因此,我想到了使用此…

html 登录失败,qq音乐登录失败 QQ音乐总是显示登录失败是怎么回事

urlproc.exe是什么进程?没见过,请前辈们指点?造成QQ音乐登录不上现象的原因有如下三种可能: 一、木马病毒对QQ音乐的必要组件或文件进行破坏,导致QQ音乐登录失败,登陆不上的情况发生。 二、Windows系统防火墙(或其他安…

C 常对象成员

C 常对象成员在C 中,可以将对象的成员声明为const,包括常数据成员和常成员函数C 常数据成员 常数据成员的作用与一般常变量相似,用关键字const来声明常数据成员。常数据成员的值是不能改变的,只能通过构造函数的参数初始化表对常数…

娄底二中高考2021成绩查询,2021年娄底高考状元名单公布,娄底高考状元学校资料及最高分...

2019年高考已经落下帷幕,高考放榜时刻就要到来,每年的高考状元都会被各界高度关注,那么今年娄底高考状元花落谁家呢?娄底高考状元会给人带来惊喜吗,让我们一起期待2019年娄底高考状元的诞生。下面小编为给为梳理下历年…

C 常指针

C 指向对象的常指针C 定义指向对象的常指针的一般形式为 类名 * const指针变量名;也可以在定义指针变量时使之初始化在C 中,虽然指向对象的常指针变量的值不能改变,但可以改变其所指向对象的值,如果想将一个指针变量固定地与一个对…

microsoftexchange邮箱容量怎样看_企业邮箱申请注册的要求有哪些?_网站建设_创客网络...

随着现在互联网信息化发展的速度不断加快,企业邮箱作为企业之间信息传输的重要工具,其重要性不亚于企业网站,但市场上企业邮箱种类繁多,包含的功能也各不相同,稍有差异,你知道怎么去选择好企业邮箱吗&#…

Unity中Shader观察空间推导(在Shader中实现)

文章目录 前言一、观察空间矩阵推导1、求观察空间基向量2、求观察空间的基向量在世界空间中的矩阵 的 逆矩阵2、求平移变换矩阵3、相乘得出 观察空间转化矩阵4、得到顶点的世界空间坐标,然后转化到观察空间5、把观察空间坐标转化为齐次裁剪坐标输出到屏幕 二、最终效…