第一层:封装

news2024/11/26 9:44:14

文章目录

  • 前言
  • 类和对象
  • 封装
    • class
    • 权限
      • public
      • protected
      • private
    • struct和class的区别
    • 封装的好处
    • 封装的用法
  • 学完封装,突破第一层

🎉welcome🎉
✒️博主介绍:一名大一的智能制造专业学生,在学习C/C++的路上会越走越远,后面不定期更新有关C/C++语法,数据结构,算法,Linux,ue5使用,制作游戏的心得,和大家一起共同成长。
✈️C++专栏:C++爬塔日记
😘博客制作不易,👍点赞+⭐收藏+➕关注

前言

在一方神秘的土地上,有一座高耸入云的塔,叫做C++,经历了之前C语言对我的磨砺,我步入的这座神秘的古塔。

类和对象

进入这座古塔中,一段话浮现在我的脑海之中,C++面向对象有三大特性:封装、继承、多态,
同样,C++认为万事万物都可以为对象,对象具有属性和行为,比如,人可以作为对象,属性有姓名、年龄、身份证号、身高、体重,行为有跑步、吃饭、睡觉,那这些具有相同属性的对象,称为类,人属于人类,任何事物都有所属的类别。

封装

了解完这些我大为震撼,不愧是C++,这是有一道声音飘来,“挑战者,你今天的任务就是掌握封装的力量,封装可以隐藏事物实现的细节,对外提供访问方式,你若掌握成功此力量,便能突破这第一层。”声音散去,出现在眼前的只有一串的代码和注释…

class

代码的开始是一个class,它代表了这是一个类,只有先写上class,后面跟着类名,任何在大括号中写入我们这个类的权限、属性、行为便创建好了一个类,这个时候可以试着去创建一个学生类,属性有名字、学号,行为可以访问名字和学号。

#include<iostream>
using namespace std;
#include<string>

class student
{
	//属性
	string name;//名字
	string stunum;//学号
	//行为
	void print()
	{
		cout << "name: " << name<< endl;
		cout << "stunum: " << stunum << endl;
	}
};

权限

在class当中提到了一个概念,叫做权限,权限是封装比较重要的东西,它可以让不同的属性、行为的权限是不一样,权限分为三种:public、protected、private。

public

public是公共权限,它权限下的东西可以可以在类外进行访问,也可以在类内进行访问,类外类内,指的就是我们的class大括号,大括号内是类内,大括号外是类外,可以进行验证一下。

#include<iostream>
using namespace std;
#include<string>

class student
{
public:

	string name;
	string stunum;

	void print()
	{
		cout << "name: " << name<< endl;
		cout << "stunum: " << stunum << endl;
	}
};

int main()
{
	student s1;
	cin >> s1.name;
	cin >> s1.stunum;
	s1.print();
	return 0;
}

在这里插入图片描述
可以看到,程序成功的跑起来了,我们在类外也对类内的属性进行的修改,也能访问我们类内的行为。

protected

protected是保护权限,在该权限下的内容不可以在类外进行访问,但是可以在类内进行访问,同时,它可以让我们的“儿子”(继承中的概念)进行访问,同样可以试一下。

#include<iostream>
using namespace std;
#include<string>

//男人
class man
{
//保护权限
protected:
	string _name;//名字
	string _car;//车
	string _age;//年龄
};
int main()
{
	man m1;
	cout << m1._name << endl;

	return 0;
}

在这里插入图片描述在这里插入图片描述
可以看到是有报错的,报错原因也有,不可访问。

private

private是我们的私密权限,他和我们的protected对于类内类外的访问权限是不一样的,他们的区别在于,protected,它权限下的东西是可以让“儿子”访问的,但是private是不可以让我们的“儿子”访问的,如果类外访问,可以参考protected的报错。

struct和class的区别

根据学习结构体可以得知,struct的作用和class是基本一致的,访问类内成员的方式也是一样的,那它们两个根本的区别是什么?既然作用是基本一致的,为什么要分成两个?这里就是上面所讲的结构问题,对于我们的struct来说,如果类内不分权限的,它的默认权限是公共权限public,而class的默认权限是私有权限private,这里可以用代码的方式得出结论。

#include<iostream>
using namespace std;
#include<string>

//用结构体命名的学生1
struct stu1
{
	string _name;
};
//用类命名的学生2
class stu2
{
	string _name;
};

int mian()
{
	struct stu1 s1;
	stu2 s2;
	cin >> s1._name;
	cin >> s2._name;

	return 0;
}

在这里插入图片描述在这里插入图片描述
同样的是用默认权限,可以看到,struct的可以类外访问,而class的不能进行类外访问。

封装的好处

1封装可以隐藏我们实现的细节
2.可以提高我们代码的安全性

对于封装而言,可以让程序员自己分配我们类内属性和行为的权限,更加安全,同时可以隐藏掉一些我们实现动作时候的细节。

封装的用法

封装的作用不仅仅是我们表面上看到的那么简单,我们可以让类的属性私有化,如何对外留有访问方式,我们可以决定类外对于这个属性的行为,可以是可读可写,也可以是只读不写,只要是我们想,那就可以去实现,比如现在可以实现个案例,如下图:
在这里插入图片描述
去实现一个男人类,他有三个属性,姓名,汽车,妻子,其中姓名和汽车是可以让人知道的,但是不能让每个人都访问,属于保护权限,妻子属于自己一个人的,谁都不能去占用,属于私有权限,同时需要留出接口用于访问类内的元素。

#include<iostream>
using namespace std;
#include<string>

//男人类
class man
{
//公共权限,对外留的访问接口
public:

	//对名字进行写入
	void get_name(string s1)
	{
		_name = s1;
	}

	//对名字进行读出
	string read_name()
	{
		return _name;
	}

	//对于汽车进行写入
	void get_car(string car)
	{
		_car = car;
	}

	//对妻子进行写入
	void get_wife(string wife)
	{
		_wife = wife;
	}

//保护权限,“儿子”可以访问
protected:
	string _name;//名字
	string _car;//汽车
//私有权限,“儿子”不可以访问,只有自己可以访问
private:
	string _wife;//妻子
};

int main()
{
	man m1;
	m1.get_name("狗蛋");
	m1.get_car("劳斯莱斯幻影");
	m1.get_wife("翠花");
	cout << "这个男人的名字叫:" << m1.read_name() << endl;
	return 0;
}

在这里插入图片描述
通过运行结果只能看出,“狗蛋”的名字是写入进去了,那其他的呢?可以通过调试的窗口看出。
在这里插入图片描述
通过调试可以看出,我们的写入很成功,这也是封装最基本的用法。

学完封装,突破第一层

看完面前石板的内容,经过了我孜孜不倦的学习,终于掌握了封装的力量,“少年人,你很不错,上第二层去吧。”…

😘预知后事如何,关注新专栏,和我一起征服C++这座巨塔
🚀专栏:C++爬塔日记
🙉都看到这里了,留下你们的👍点赞+⭐收藏+📋评论吧🙉

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

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

相关文章

【电子学会】2022年12月图形化四级 -- 金牌百分比

金牌百分比 计算金牌榜前十的国家获得的金牌总数占金牌总数的百分比。金牌榜前十的国家获得的金牌总数占金牌总数的百分比等于(金牌榜前十国家的金牌总数本届冬奥会金牌总数)100,并将这个数向下取整。 1. 准备工作 (1)保留舞台默认背景及角色小猫; (2)建立变量“金牌…

YOLOALL 一文了解YOLO各版本答案

来源&#xff1a;投稿 作者&#xff1a;ΔU 编辑&#xff1a;学姐 YoloAll项目简介 相信了解YOLO的小伙伴们一定都有这样的困扰&#xff0c;目前YOLO各个版本数量非常多&#xff0c;不知道在实际场景中应该选择哪个YOLO版本。甚至有时为了比较两个不同版本的YOLO的效果&#x…

python标准库xmlrpc 之RPC远程方法调用

&#x1f496;&#x1f496;&#x1f496;养成每日阅读好习惯, 每天进步, 超越昨天的自己&#x1f496;&#x1f496;&#x1f496; 愿景&#xff1a;输出体系化编程知识与技巧&#xff0c;助力软件行业发展与从业者学习减负&#xff0c;让编程产生更大价值。 &#x1f50e;&am…

【linux】之网络安全

防火墙作用 在计算机领域,防火墙是用于保护信息安全的设备,其会依照用户定义的规则,允许或限制数据的传输。 用于保护内网安全的一种设备依据规则进行防护用户定义规则允许或拒绝外部用户访问防火墙分类 逻辑上划分,防火墙可以大体分为主机防火墙和网络防火墙 主机防火墙:…

服务注册与发现:Nacos Discovery

目录 一、概述 二、Nacos discovery——服务的注册与发现 1. 版本关系 2. 下载安装 &#xff08;1&#xff09;下载 &#xff08;2&#xff09;启动 &#xff08;3&#xff09;浏览器访问 三、Nacos服务注册与发现实战 1. 构建Spring Cloud Alibaba工程 &#xff08;1&…

Vite性能优化之分包策略

为什么需要分包策略&#xff1f; 浏览器的缓存策略 浏览器在请求静态资源时&#xff0c;只要静态资源的名称不变&#xff0c;它就不会重新请求 xxx.js资源。 使用Vite打包后的js文件是带有哈希值的&#xff0c;只要我们的代码内容有一点点变化&#xff0c;那么文件的hash值都…

ConfigMap

目录 文章目录目录本节实战前言1、创建:warning: yaml里易混淆的点&#xff08;1&#xff09;|用法&#xff08;2&#xff09;|和|-用法&#xff08;3&#xff09;>用法1.通过资源清单文件方法创建ConfigMap2.通过from-file关键字创建ConfigMap&#xff08;1&#xff09;fro…

二十九、Kubernetes中CronJob(CJ)详解

1、概述 在kubernetes中&#xff0c;有很多类型的pod控制器&#xff0c;每种都有自己的适合的场景&#xff0c;常见的有下面这些&#xff1a; ReplicationController&#xff1a;比较原始的pod控制器&#xff0c;已经被废弃&#xff0c;由ReplicaSet替代 ReplicaSet&#xff…

yolov5训练自己的数据集,OpenCV DNN推理

学更好的别人&#xff0c; 做更好的自己。 ——《微卡智享》 本文长度为4238字&#xff0c;预计阅读9分钟 前言 上一篇《OpenCV--自学笔记》搭建好了yolov5的环境&#xff0c;作为目标检测在应用中&#xff0c;最重要的还是训练自己的数字集并推理&#xff0c;所以这一篇就专门…

『Kubernetes』在Linux中快速安装K8S集群

&#x1f4e3;读完这篇文章里你能收获到 K8S安装全过程博主自己实操笔记带你跳过所有坑感谢点赞收藏&#xff0c;避免下次找不到~ 文章目录一、基本环境配置1. 关闭selinux2. 关闭swap分区或禁用swap文件3. 修改网卡配置4. 关闭防火墙5. 设置机器HostName6. 更新系统时间二、k…

Vue 2.x源码学习:数据响应式改造

众所周知&#xff0c;Vue是以数据驱动视图展示的&#xff0c;即Vue会监听数据的变化&#xff0c;从而自动重新渲染页面的结构。 Vue主要通过三步走来实现这个功能&#xff1a; 第一步是对数据进行响应式改造&#xff0c;即对数据的读写操作进行劫持&#xff1b; 第二步是对模…

字符数组编程题(C语言)

文章目录1、用字符%c的形式给一个字符数组赋初值&#xff0c;然后以字符串%s的形式输出2、用字符getchar&#xff08;&#xff09;的形式给一个字符数组赋初值&#xff0c;然后以字符串puts&#xff09;的形式输出4、从键盘上输入一串字符gets&#xff0c;然后输出%s5、从键盘输…

Mysql导出100万条数据,9种导出方法优缺点和速度、文件大小测试

这里写目录标题1.DBase文件2.文本文件3. CSV文件4.HTML文件5.Excel数据表低版本6.Excel文件2007年以后版本7.SQL脚本文件8.XML文件9.JSON文件总结这一次我主要就是想针对mysql导出的速度和文件大小进行优缺点测试&#xff0c;这次主要就是用上之前生成的天气表这是表里面的数据…

除夕New Year Eve,祝大家团圆幸福!

除夕&#xff0c;为岁末的最后一天夜晚,意为旧岁至此而除&#xff0c;另换新岁。New years Eve is the last night at the end of the year.which means that the old year will be removed and a new year will be replaced.除夕&#xff0c;在国人心中是具有特殊意义的&#…

第一章 TCP/IP 协议

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.什么是TCP/IP ​编辑 二.什么是协议 1.三要素 2.协议与标准区别 三.广…

中小型企业如何从企业内容管理 (ECM) 系统提供的工具中受益?

在当今快节奏的商业世界中&#xff0c;时间变得非常宝贵。团队越大&#xff0c;就越难有效地管理时间。但即使是中小型企业也可以从企业内容管理 (ECM) 系统提供的工具中受益。 ECM 系统使各种规模的企业能够通过数字化纸质文档、捕获电子文档和电子邮件、自动化文档驱动的流…

(转)Chrome的最小字体12px限制最终解决办法

相信不少做网站的用户会有这样一个问题&#xff0c;Chrome 默认最小字体是12px&#xff08;最新版英文也有此问题&#xff09;&#xff0c;这个是 Chrome 为了更好显示中文设计的&#xff0c;但是这样一来就会出现某些上标、下标字体过大&#xff0c;影响用户体验。之前在开发H…

ue4c++日记2(继承|设置位置|对象移动)

目录 语句速查 静态网格定义 创建静态网格对象 设置对象位置 编辑器可编辑 编辑器可见 仅类默认值处可见 速览定义可查剩下 对象移动 1继承 例子 1.创建actor 2.命名和填写路径 小插曲 3.新建一个蓝图类继承上面创建的actor 4.其可蓝图化是因为创建的c类可蓝图化 5…

【算法基础】1.8离散化

文章目录离散化如何离散确定映射方式区间和当数据范围的跨度很大&#xff0c;但是数据很稀疏时&#xff0c;可以使用离散化。 离散化 如何离散 数据范围很大&#xff0c;但是并不是每个数字都会出现&#xff0c;就可以将原始数据按照顺序映射到一个小的数据范围。 确定映射方…

第五届字节跳动青训营 前端进阶学习笔记(二)JavaScript编码规范

文章目录1.前言2.写好JS的一些基本原则这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天 1.前言 本次课程主要讲解了有关JavaScript编码原则和代码优化的相关问题。 重点内容&#xff1a; HTML、CSS、JS各司其责具备正确性、扩展性、复用性的组件封装函数式编程思想代…