C++ 抽象与封装

一 抽象

抽象实例:时钟
数据抽象:
具有表面当前时间的时、分、秒

行为抽象:
具有设置时间和显示时间两个最基本的功能。

抽象实例:人
数据抽象:姓名、年龄、性别等。

行为抽象:
生物属性:吃饭、穿衣、睡觉、行走等行为。
社会属性:工作、学习等行为。

抽象
抽象是对具体对象(问题)进行概括,提炼出这一类对象的公共性质并加以描述的过程。

先注意问题的本质机描述,其次是实现过程或细节。
数据抽象:描述某类对象(食物)共有的属性或状态。
行为抽象:描述某些对象(食物)共有的行为特征或具有的功能。

抽象是相对,而非是绝对的。

在研究问题时,侧重点不同,可能会产生不同的抽象结果;解决同一问题时要求不同,也会产生不同的抽象结果。

如果开发一个人事管理软件,那么关心的时员工的姓名、性别、工龄、工资、工作部门等相关信息。

如果开发学籍管理软件,那么关心的时学生的姓名、性别、年龄、籍贯、所在学院等相关信息。

在这里插入图片描述

二定义与声明

1 定义和使用类的基本过程

第一步:进行抽象;
第二步:声明类;
第三步:实现类;
第四步:使用类;

2 类的声明:类的成员构成

类是一种抽象数据类型,声明形式如下:
在这里插入图片描述

3 声明类举例:时钟类

在这里插入图片描述

三 访问控制

类成员的访问控制
什么是“类内”和“类外”;
在类声明之内称为类内;
在类声明之外称为类外;

什么事“类内”和“类外”;
在类声明之内称为类内;
在类声明之外称为类外;

数据封装的目的就是信息隐蔽。为了达到信息隐蔽,在C++类中,并非所有的成员都是对外可见的(或者说,是类外可以访问的)

通过设置成员的访问控制属性来实现对类成员的访问控制。
这些控制属性有:public、protected、private.

1 类的声明:对成员的访问控制

在这里插入图片描述

2 公有成员

在关键字public后面声明,它们是类与外部的接口,任何类内、类外函数都可以访问公有数据和函数。
在这里插入图片描述

3 私有成员

在关键字private后面声明,只运行本类中的函数访问,而类外的任何函数都不能访问。
在这里插入图片描述

3 保护成员

在关键字protected后面声明的数据成员或成员函数。与pirvate类似,其差别表现在继续与派生时对派生类的影响不同。

4 类声明举例:时钟类

在这里插入图片描述

四 类的实现与使用

1 类实现

实现一个类,就是按照所设定的功能语义去实现类中的每一个成员函数。

在这里插入图片描述

2 类的使用

类是一种数据类型,类的变量称作类的实例,或对象。
定义对象的方式:类名 对象名;
例如:Clock aclock;

3 访问类成员的方法

通过对象来访问成员
对象名.公有成员函数(形参列表);
对象名.公有数据成员

通过对象指针来访问成员
对象的指针->公有成员函数名(形参列表);
对象的指针->公有数据成员

举例:一个比较完整的Clock类 声明Clock类
在这里插入图片描述
实现Clock类中的成员函数
在这里插入图片描述
使用Clock类
在这里插入图片描述
2个指针指向同一个对象,如果其中一个指针改变了对象值,另外一个指针访问的值会不会改变?为什么?
在这里插入图片描述
总结:定义和使用类类型的过程
抽象:对事物进行抽象;
声明类:根据抽象的结果定义类的特性;
实现类:实现类中成员函数的逻辑;
使用类:在程序中定义类的实力,使用类的公有成员。

4 类对外的接口

在定义类时,把可以被外部访问的成员说明public属性,作为外部访问类中成员的接口。把不能被外部访问的成员说明为private或protected属性。
在这里插入图片描述
在声明类时,具有不同访问属性的成员可以按任意顺序出现。
在这里插入图片描述
修饰访问属性关键字可以多次出现。
在这里插入图片描述
一个成员只能具有一种访问属性,否则会出现歧义。
在这里插入图片描述

五 类的对象

例子:简单int数组类
第一步:抽象
数据抽象
数组大小;
数组所占据的内存区;
行为抽象
能够获得数组的大小;
能够将数据保存到数组中;
能够获得数组中所保存的最大值;
能够获得数组中所保存的最小值;

第二步:定义类
在这里插入图片描述
第三步:实现类
在这里插入图片描述
第三步:实现类(续)
在这里插入图片描述
第四步:使用类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在IntArray类中,函数成员getmaxVal和getMinVal在逻辑上是否存在共性?
在这里插入图片描述
两个函数的代码框架相似,只有在进行if条件判断时存在细微的差异。

改进:为IntArray类增加公用的私有函数
在这里插入图片描述
在这里插入图片描述

六 数据封装的相对性

以改进了的IntArray类为例,私有的成员函数getVal在类外(如main函数)是不能被调用的。

数据封装是一个相对的概念,只是对于类外而言。而对于类内部,所有的成员都是相互可见的。
在这里插入图片描述

相关推荐

  1. 三、C#面向对象编程(封装抽象类)

    2024-05-11 01:54:03       60 阅读
  2. C# 抽象接口

    2024-05-11 01:54:03       63 阅读
  3. 对象、抽象封装、继承、多态以及举例

    2024-05-11 01:54:03       31 阅读
  4. C++ 抽象

    2024-05-11 01:54:03       37 阅读
  5. C++ 】类对象 -- 纯虚函数抽象

    2024-05-11 01:54:03       26 阅读
  6. C#语言入门】21. 抽象开闭原则

    2024-05-11 01:54:03       36 阅读
  7. C++】mapset的封装实现

    2024-05-11 01:54:03       28 阅读
  8. 【设计模式】封装、继承、抽象、多态

    2024-05-11 01:54:03       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 01:54:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 01:54:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 01:54:03       82 阅读
  4. Python语言-面向对象

    2024-05-11 01:54:03       91 阅读

热门阅读

  1. 关于emulate

    2024-05-11 01:54:03       33 阅读
  2. 7-Zip命令行调用命令收集(20个)

    2024-05-11 01:54:03       39 阅读
  3. 如何找到高质量的微信群?分享8种适用的方法!

    2024-05-11 01:54:03       38 阅读
  4. 如何利用AI提高内容生产效率?

    2024-05-11 01:54:03       27 阅读
  5. 人民币数字和中文汉字转换

    2024-05-11 01:54:03       192 阅读
  6. Union内存分布

    2024-05-11 01:54:03       36 阅读
  7. ZygoteInit

    2024-05-11 01:54:03       26 阅读
  8. 正则表达式语法详解

    2024-05-11 01:54:03       36 阅读
  9. 超像素分割【代码】

    2024-05-11 01:54:03       34 阅读
  10. elasticsearch安装配置注意事项

    2024-05-11 01:54:03       32 阅读
  11. springboot习题

    2024-05-11 01:54:03       25 阅读