C++ 抽象与封装

news2025/2/24 13:03:26

一 抽象

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

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

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

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

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

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

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

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

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

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

在这里插入图片描述

二定义与声明

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函数)是不能被调用的。

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

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

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

相关文章

Cocos creator实现《战机长空》关卡本地存储功能

Cocos creator实现《战机长空》关卡本地存储功能 Cocos creator在开放小游戏过程中,经常会出现设置关卡,这里记录一下关卡数据本地存储功能。 一、关卡设置数据 假如我们有关卡数据如下, let settings [ { level: 1, // 第1关 score: 0,…

Java类加载器介绍

在Java中,类加载器是一种动态加载类的机制,它负责在运行时查找、加载和链接类文件。当Java应用程序需要创建某个类的对象时,类加载器会在运行时查找该类对应的.class文件,并将其加载到Java虚拟机中。Java类加载器通常分为三层&…

【MQTT】mosquitto 的 “下载、交叉编译、使用” 详细教程,手把手搭建一个MQTT Broker

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-05-11 0…

系统架构设计师 - 计算机组成与体系结构(1)

计算机组成与体系结构 计算机组成与体系结构计算机结构 ★CPU 组成结构运算器组成控制器组成 计算机体系结构冯诺依曼结构哈弗结构 嵌入式芯片(了解) 存储系统 ★★★★概述Cache主存编址磁盘管理磁盘基本结构与存取过程磁盘优化分布存储磁盘管理 大家好…

C++:多态-重写和重载

重写(Override)和重载(Overload)是面向对象编程中常用的两个概念,它们虽然都涉及到方法的定义,但是在实现和使用上有着不同的特点。 重写(Override): 重写是指在子类中重…

部署xwiki服务需要配置 hibernate.cfg.xml如何配置?

1. 定位 hibernate.cfg.xml 文件 首先,确保您可以在 Tomcat 的 XWiki 部署目录中找到 hibernate.cfg.xml 文件: cd /opt/tomcat/latest/webapps/xwiki/WEB-INF ls -l hibernate.cfg.xml如果文件存在,您可以继续编辑它。如果不存在&#xff…

Go语言系统学习笔记(一):基础篇

1. 写在前面 公司的新业务开发需要用到go语言,虽然之前没接触过这门语言,但在大模型的帮助下,边看项目边写代码也能进行go的项目开发,不过,写了一段时间代码之后,总感觉对go语言本身,我的知识体…

【SRC实战】合成类小游戏外挂漏洞

挖个洞先 https://mp.weixin.qq.com/s/ZnaRn222xJU0MQxWoRaiJg “以下漏洞均为实验靶场,如有雷同,纯属巧合” 合成类小游戏三个特点: 1、一关比一关难,可以参考“羊了个羊” 2、无限关卡无限奖励,可以参考“消灭星星…

BBS客户端服务器的编写

根据网络编程中的内容,我们本篇文章将讲解一个bbs通信的项目,首先让我们了解一下什么是bbs. 一、bbs介绍 BBS,即Bulletin Board System的缩写,中文译为“电子公告板系统”或“网络论坛”。它是一个在网络上进行信息交流和讨论的…

【科研】常用的实验结果评价指标(1) —— R2(R-square)是什么?

常用的实验结果评价指标(1) —— R2(R-square),可能为负数吗?! 提示:先说概念,后续再陆续上代码 文章目录 常用的实验结果评价指标(1) —— R2(R-square),可能…

基于WPF的DynamicDataDisplay曲线显示

一、DynamicDataDisplay下载和引用 1.新建项目,下载DynamicDataDisplay引用: 如下图: 二、前端开发: <Border Grid.Row="0" Grid.Column="2" BorderBrush="Purple" BorderThickness="1" Margin="2"><Grid>…

【智能算法应用】基于麻雀搜索算法-支持向量回归预测(SSA-SVR)

目录 1.算法原理2.数学模型3.结果展示4.调试记录5.参考文献6.代码获取 1.算法原理 【智能算法】麻雀搜索算法&#xff08;SSA&#xff09;原理及实现 2.数学模型 支持向量机(SVM)是针对二分类问题&#xff0c;支持向量回归(SVR)基于SVM应用与回归问题。SVR回归与SVM分类的区…

【JVM】了解JVM规范中的虚拟机结构

目录 JVM规范的主要内容 1&#xff09;字节码指令集(相当于中央处理器CPU) JVM指令分类 2&#xff09;Class文件的格式 3&#xff09;数据类型和值 4&#xff09;运行时数据区 5&#xff09;栈帧 6&#xff09;特殊方法 7&#xff09;类库 JVM规范的主要内容 1&#…

Paddle 实现DCGAN

传统GAN 传统的GAN可以看我的这篇文章&#xff1a;Paddle 基于ANN&#xff08;全连接神经网络&#xff09;的GAN&#xff08;生成对抗网络&#xff09;实现-CSDN博客 DCGAN DCGAN是适用于图像生成的GAN&#xff0c;它的特点是&#xff1a; 只采用卷积层和转置卷积层&#x…

如何编译不同目录下的两个文件

1.直接编译 2.打包成动静态库进行链接

【Shell脚本】Shell编程之循环语句

目录 一.循环语句 1.for语句的结构 1.1.格式 1.2.实操案例 案例1. 案例2. 案例3. 案例4. 2.while语句的结构 2.1.格式 2.2.实操案例 案例1. 案例2. 案例3. 案例4. 3.until循环命令 3.1.格式 3.2.实操案例 案例1. 二.补充 1.常用转义符 一.循环语句 1.for…

鸿蒙内核源码分析(任务切换篇) | 看汇编如何切换任务

在鸿蒙的内核线程就是任务&#xff0c;系列篇中说的任务和线程当一个东西去理解. 一般二种场景下需要切换任务上下文: 在线程环境下&#xff0c;从当前线程切换到目标线程&#xff0c;这种方式也称为软切换&#xff0c;能由软件控制的自主式切换.哪些情况下会出现软切换呢? 运…

Leetcode—138. 随机链表的复制【中等】(cend函数)

2024每日刷题&#xff08;129&#xff09; Leetcode—138. 随机链表的复制 实现代码 /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node(int _val) {val _val;next NULL;random NULL;} }; */class Solution { public:Node* copyRan…

【强训笔记】day18

NO.1 思路&#xff1a;双指针模拟。to_string将数字转化为字符。 代码实现&#xff1a; class Solution { public:string compressString(string param) {int left0,right0,nparam.size();string ret;while(right<n){while(right1<n&&param[right]param[right…

我在洛杉矶采访到了亚马逊云全球首席信息官CISO(L11)!

在本次洛杉矶举办的亚马逊云Re:Inforce全球安全大会中&#xff0c;小李哥作为亚马逊大中华区开发者社区和自媒体代表&#xff0c;跟着亚马逊云安全产品团队采访了亚马逊云首席信息安全官(CISO)CJ Moses、亚马逊副总裁Eric Brandwine和亚马逊云首席高级安全工程师Becky Weiss。 …