C++8种常见类类型

前言

大部分面向对象开发工作中都应用了以下部分或者全部的基本类别的类:
1、具体类(concrete class)
2、抽象类(abstract class)
3、接口类(interface class)
4、节点类(node class)
5、支持类(support class)
6、域类(domain class)
7、应用类(utility class)
8、集合和容器类(collection and container class)
这些类并不是特定的语言结构,而是用于实现逻辑类的技术。

类类型 描述
具体类 独立类;表示一个祖先-后代世系终止的结束类
抽象类 为所有的子类提供布局和蓝图的基准类,不能声明此类的对象;必须派生新的类,对抽象的基本中声明任何虚函数提供定义
接口类 用于修改或者增强另外一个类得接口,为了非面向对象代码和数据,提供面向对象性,而用来封装独立函数
节点类 提供了继承和多态的基础;不包含纯虚函数
域类 创建类在指定域内部模拟部分现实或者实体
支持 /应用类 不管在任何域内,对于不同的应用都非常有用
集合和容器类 其他对象组的一般性容纳器

具体类

具体类是作为结束类而设计和实现的,表示祖先-后代世系的终止,所以并不适合相关类的一般系统,每个具体类都不必参考其他类就可以单独理解。
具体类可以在它的实现中得到优化,因为没有必要去单担心派生类中的功能性;
所以具体类是线程处理中多线程类的理想候选者,在线程化时,不必考虑派生类中出现的覆盖或者重载重要线程化成员函数。

抽象类

抽象类是为所有后代提供蓝图的类,所以实际上,抽象类也就仅仅是一个蓝图罢了,用户也不能声明一个抽象类的对象,为了使用抽象类,用户必须首先从基类中派生出一个新类,而且其为抽象类中声明的所有纯虚函数提供实际定义,默认情况下,抽象类至少需要一个后代,才可以发挥出作用。
此外,为了让一个类成为抽象类,至少需要一个纯虚函数。

class A{
public:virtual void lock(void)=0;virtual void unlock(void)=0;virtual ~A(void);
}

而类B则从类A中派生出来:

class B:public A{
protected:pthread_,mutex_t x;
public:
B(void);
~B(void);
virtual void lock(void) {pthread_mutex_lock(x);}
virtual void unlock(void) {pthread_mutex_unlock(x);}
}

不能直接声明抽象类:
A MemoryLock; //非法的
B MemoryLock; //合法的

接口类

类用户可用的数据成员和成员函数组成了该类的接口,C++对于类有3种访问策略:
1、私有(private)
2、受保护(protected)
3、公有(public)

其中:
1、当数据成员和成员函数为私有的时,它们仅仅只能被中间类的成员函数访问,无法被非该类的成员函数所访问
2、类的成员函数和数据成员为受保护的时,它们可以被类的中间成员和该类的所有后代所访问,但该类之外的函数无法访问
3、类可以将成员函数和数据成员声明为公有的,则不管是什么类的成员,都可以访问被定义为public的接口和成员

例如以下,这可以保护敏感函数或者变量:

class mutex{
protected;pthread_mutex_lock x;
public:lock() {pthread_mutex_lock(&x);}unlock() {pthread_mutex_unlock(&x);}
};

节点类

节点类是继承和多态的基础,与抽象类一样,节点类设计用于继承,但是不同的是,节点类不包含纯抽象函数,其可以直接使用。
节点类提供了可以直接被派生类继承的受保护的数据成员和成员函数,它使用基类的指针允许在后代类中操纵成员函数,用户可以通过多态和继承来特殊化节点类。
节点类既可以是基类,也可以是派生类。

域类

域类是一种创建用来模拟指定域内实体的类,类的意义特定于该域;

支持/应用类

这一类和域毫无关系,可以跨域使用,其在不同的应用程序上都非常有用,例如日期类、时间类、计量类等等。

集合和容器类

这一类主要充当了其他类或者对象的容纳器对象。

容器类 类型
Stack List
Queue Associative Array
Deque Graph
Set Tree
Multiset Table

实现集合和容器类的两个方法:
1、基于对象途径;
2、基于模板途径;

其中基于对象结构非常依赖于多态和继承,产生了高度纵向的集合和容器结构;
基于模板的结构则十分依赖于C++中模板结构的一般性功能,并且产生集合和容器类的横向结构;

C++8种常见类类型相关推荐

  1. 四种实体类类型:VO、DTO、DO、PO

    在项目应用中,VO对应于页面上需要显示的数据(表单),DO对应于数据库中存储的数据(数据表),DTO对应于除二者之外需要进行传递的数据. 一.实体类 百度百科中对于实体类的定义如下: 实体类的主要职责 ...

  2. post请求几种常见content-type类型

    Content-Type Content-Type(MediaType),即是Internet Media Type,互联网媒体类型,也叫做MIME类型.在HTTP协议消息头中,使用Content-T ...

  3. python参数方法_Python方法的几种常见参数类型

    匿名用户 1级 2018-11-01 回答 无默认值参数(关键字参数): def myfun(a): print(a)这是参数的最简单形式.这个a就是无默认值参数.在调用函数时必需为无默认值参数指定值 ...

  4. CCRC信息安全服务资质有哪几种常见的类型?

    CCRC信息安全服务资质是指信息安全服务组织提供安全服务的资格,包括对法律地位,资源状况,管理级别和技术能力的要求.信息安全服务资质认证是根据国家法律法规,国家标准,行业标准和技术规范,按照基本认证标 ...

  5. 一文读懂Redis常见对象类型的底层数据结构

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 转自:伍 ...

  6. 通过对象属性去重_Redis常见对象类型的底层数据结构

    作者:伍陆七 来源:cnblogs.com/chentianming/p/13838347.html Redis 是一个基于内存中的数据结构存储系统,可以用作数据库.缓存和消息中间件.Redis 支持 ...

  7. 常见的5种项目管理问题类型

    项目管理的5大影响素:时间.范围.成本.风险.质量.项目经理需要对这些因素进行均衡考量,并根据需要略有侧重,进行整体把握,即我们常说的均衡型管理风格.而忽略任何一因素,都会对项目产生极大影响. 常见的 ...

  8. AI芯片:几种常见类型的AI芯片

    引入   近些年来,深度学习网络不断兴起.数据运算量越来越大,对处理器并行处理能力要求越来越高.传统的通用处理器CPU受摩尔定律的影响,已经不能满足大规模的数据处理了.故而,专用AI处理器的设计再一次 ...

  9. ADC的几种常见类型

    ADC的几种常见类型 介绍 种类 1. 逐次逼近型 2. 积分型ADC 3. 并行比较A/D转换器 4. 压频变换型ADC 5. ∑-Δ型ADC 6.流水线型ADC reference 介绍 现在的软 ...

最新文章

  1. 大数据-spark-hbase-hive等学习视频资料
  2. Leetcode刷题第1题:两数之和(基于Java语言)
  3. SAP实战中Submit的常见用法-调用标准程序
  4. 字典与文本文档的转换
  5. IE下列表框不能给option绑定click事件的解决办法
  6. 通过一个简单例子理解 RecyclerView.ItemDecoration
  7. 前端学习(2652):初始化项目
  8. BZOJ 1724: [Usaco2006 Nov]Fence Repair 切割木板
  9. xshell 登录kail拒绝了密码 已解决
  10. vs2013下载安装
  11. 3.字体样式,分隔线与段落
  12. Pocket PC 模拟器上网设置
  13. 哈佛结构和冯诺依曼结构特点
  14. Charles抓包 - 手机
  15. 提取文档中关键词所在行
  16. 互联网日报 | 4月27日 星期二 | 美团回应被立案调查;滴滴开通老年人打车400热线;百度App月活跃用户数达5.58亿
  17. 干掉“我的电脑”中超级解霸V8的图标
  18. 35 行代码实现一个简单的 shell
  19. 前端菜鸟必学!less使用基础讲解
  20. python 计算一个字符串中所有数字的和

热门文章

  1. 登录邮箱怎么填,企业个人邮箱登录注册
  2. 在 Windows10 系统下安装 Ubuntu22.04 系统
  3. 关于字符转换byte、char、string
  4. 【视频】编码基础知识之I帧、P帧、B帧
  5. IPv6与VoIP——ipv6接口标识与VoIP概述
  6. win10系统重装后只有一个盘了别的盘的文件如何找到
  7. kali linux : ettercap工具arp欺骗
  8. 批量删除文件夹名称中的所有数字和汉字
  9. 管理RMAN备份_报告(Reporting)RMAN操作
  10. 什么是字节码和字节码有什么好处?