C++ 语言类 (class) 和抽象数据类型 (abstract data type)

这篇具有很好参考价值的文章主要介绍了C++ 语言类 (class) 和抽象数据类型 (abstract data type)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++ 语言类 (class) 和抽象数据类型 (abstract data type)

在 C++ 语言中,我们使用类定义自己的数据类型。通过定义新的类型来反映待解决问题中的各种概念,从而使得程序更加简洁旦易于修改。数据抽象能帮助我们将对象的具体实现与对象所能执行的操作分离开来。

类的两项基本能力:一是数据抽象,即定义数据成员和函数成员的能力;二是封装, 即保护类的成员不被随意访问的能力。通过将类的实现细节设为 private,我们就能完成类的封装。类可以将其他类或者函数设为友元,这样它们就能访问类的非公有成员了。

接口 (interface) 是类型提供的 (公有) 操作。通常情况下,接口不包含数据成员。

1. 抽象数据类型

抽象数据类型 (abstract data type) 是封装 (隐藏) 了实现细节的数据结构。数据抽象 (data abstraction) 着重关注类型接口的一种编程技术。数据抽象令程序员可以忽略类型的实现细节,只关注类型执行的操作即可。数据抽象是面向对象编程和泛型编程的基础。

类的基本思想是数据抽象 (data abstraction) 和封装 (encapsulation)。数据抽象是一种依赖于接口 (interface) 和实现 (implementation) 分离的编程技术。类的接口包括用户所能执行的操作:类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。封装实现了类的接口和实现的分离。封装后的类隐藏了它的实现细节,类的用户只能使用接口而无法访问实现部分。

类要想实现数据抽象和封装,需要首先定义一个抽象数据类型 (abstract data type)。在抽象数据类型中,由类的设计者负责考虑类的实现过程:使用该类的程序员则只需要抽象地思考类型做了什么,而无须了解类型的工作细节。

封装 (encapsulation) 分离类的实现与接口,从而隐蔵了类的实现细节。在 C++ 语言中,通过把实现部分设为 private 完成封装的任务。

2. 不同的编程角色

程序员们常把运行其程序的人称作用户 (user)。类的设计者也是为其用户设计并实现一个类的人。类的用户是程序员,而非应用程序的最终使用者。

3. 类 (class)

类 (class) 是 C++ 提供的自定义数据类型的机制。类可以包含数据、函数和类型成员,一个类定义一种新的类型和一个新的作用域。

类可以定义一种特殊的成员函数:构造函数,其作用是控制初始化对象的方式。构造函数可以重载,构造函数应该使用构造函数初始值列表来初始化所有数据成员。

类还能定义可变或者静态成员。一个可变成员永远都不会是 const,即使在 const 成员函数内也能修改它的值:一个静态成员可以是函数也可以是数据,静态成员存在于所有对象之外。

References

(美) Stanley B. Lippman, (美) Josée Lajoie, (美) Barbara E. Moo 著, 王刚, 杨巨峰 译. C++ Primer 中文版[M]. 第 5 版. 电子工业出版社, 2013.
https://www.informit.com/store/c-plus-plus-primer-9780321714114文章来源地址https://www.toymoban.com/news/detail-409086.html

到了这里,关于C++ 语言类 (class) 和抽象数据类型 (abstract data type)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • No converter for [class xxx] with preset Content-Type ‘multipart/form-data’

    org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class cn.guet.utils.Result] with preset Content-Type ‘multipart/form-data’ 当我将判断文件是否存在逻辑,放在writeBytes中时,当判断到文件不存在,抛出 BusinessException 异常时,后台报错。 因为此时的 response.setContentType(\\\"mult

    2024年02月15日
    浏览(65)
  • 【C++数据结构 | 图速通】10分钟掌握邻接矩阵 & 邻接表 | 快速掌握图论基础 | 快速上手抽象数据类型图

    by.Qin3Yu 请注意:严格来说,图不是一种数据结构,而是一种抽象数据类型。但为了保证知识点之间的相关性,也将其列入数据结构专栏。 本文需要读者掌握顺序表和单链表的操作基础,若需学习,可参阅我的往期文章: 【C++数据结构 | 顺序表速通】使用顺序表完成简单的成

    2024年02月05日
    浏览(45)
  • Abstract Factory 抽象工厂

    提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。 其中: AbstractFactory声明一个创建抽象产品对象的操作接口。 ConcreteFactory实现创建具体产品对象的操作。 AbstractProduct为一类产品对象声明一个接口。 ConcreteProduct定义一个将被相应的具体工厂创建的

    2024年04月11日
    浏览(41)
  • 抽象工厂模式(Abstract Factory)

    抽象工厂是一种 创建型设计模式 ,它能 创建一系列相关的对象,而无需指定其具体类 。 1. 问题 假设你正在开发一款家具商店模拟器。你的代码中包括一些类,用于表示: 一系列相关产品,例如椅子(Chair)、沙发(Sofa)和咖啡桌(CoffeeTable) 系列产品的不同变体,例如你

    2024年02月11日
    浏览(37)
  • .NET Interface [接口]、abstract【抽象类】

    接口 Interface 接口不能被实例化 接口只能包含方法声明 接口中的成员包括方法、属性、索引器、事件 接口中不能包含常量、字段、构造函数、析构函数、静态成员 接口中的所有成员默认 public,因此接口中不能有private修饰符 派生类必须实现接口的所有成员 一个类可以继承多

    2024年02月05日
    浏览(97)
  • 抽象工厂模式-Abstract Factory Pattern

    原文地址:https://jaune162.blog/design-pattern/abstract-factory-pattern/ 首先我们由一个实际问题来引出抽象工厂模式。 考虑这样一个场景,系统中需要向OSS上传文件,以及通过OSS下载文件。而在系统中有不同的业务在使用这两个功能。如下图: 伪代码如下

    2024年02月20日
    浏览(37)
  • 抽象工厂模式(Abstract Factory Pattern)

    回顾工厂方法设计模式的不足:具体产品增加时,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度 产品等级结构:产品等级结构即产品的继承结构,即抽象产品与具体产品 产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构

    2024年02月02日
    浏览(40)
  • 设计模式——抽象工厂模式(Abstract Factory Pattern)

    概述        抽象工厂模式的基本思想是将一些相关的产品组成一个“产品族”,由同一个工厂统一生产。在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法具有唯一性,一般情况下,一个具体工厂中只有一个或者一组重载的工

    2024年02月03日
    浏览(47)
  • 设计模式-创建型模式之抽象工厂模式(Abstract Factory)

    在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要 一个工厂可以提供多个产品对象 ,而不是单一的产品对象。 为了更

    2023年04月20日
    浏览(42)
  • C++11 设计模式4. 抽象工厂(Abstract Factory)模式

    从前面我们已经使用了工厂方法模式 解决了一些问题。 现在 策划又提出了新的需求:对于各个怪物,在不同的场景下,怪物的面板数值会发生变化,     //怪物分类:亡灵类,元素类,机械类     //战斗场景分类:沼泽地区,山脉地区,城镇。 那么就有9类怪物====沼泽地

    2024年04月14日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包