c++:类和对象(1),封装
C++面向对象的三大特性:封装、继承、多态。
封装
封装的意义一:
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制
类中的属性和行为,我们统一称为成员
属性也叫: 成员属性 成员变量
行为也叫: 成员函数 成员方法
格式:
#include<iostream>
using namespace std;
class 类名
{
//访问权限
public:
//属性
//行为};
例子:
#include<iostream>
using namespace std;const double pai = 3.14;
//设计一个圆类,求圆的周长
//圆求周长的公式:2*Π*半径//class代表要设计一个类,类后面紧跟着的就是类名称
class Circle
{//访问权限//公共权限
public://属性//半径int m_r;//行为//获取圆的周长double zhouchang(){return 2 * pai * m_r;}
};
int main()
{//通过圆类 创建具体的(对象)//实例化 (通过一个类 创建一个对象的过程)Circle c1;//给圆对象 的属性进行赋值c1.m_r = 10;cout << c1.zhouchang() << endl;system("pause");return 0;
}

封装的意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
- public 公共权限(成员 在类内可以访问,类外可以访问)
- protected 保护权限(成员 在类内可以访问,类外不可以访问)子类可以访问父类
- private 私有权限(成员 在类内可以访问,类外不可以访问)子类不能访问父类
(后续更新子类和父类)
例子
类内可以访问示例:

这个段代码可以正常运行,说明三者都可以在类内正常访问。
类外访问示例:
这段代码中,在类外访问公共权限的姓名是正常的,在类外访问保护权限和私有权限的汽车和银行卡密码发生报错,解释了访问权限的作用。
struct和class的区别
在c++中,struct和class唯一的区别就在于默认的访问权限不同。
区别:
- struct默认权限为公共
- class默认权限为私有
示例:
下面代码中,我创建了class和struct两端变量。

此时,我们可以看到struct可以正常的进行访问,class报错提示是private成员,不能进行正常访问。
成员属性设置为私有
- 优点1:将所有成员属性设置为私有,可以自己控制读写权限
- 优点2:对于写权限,我们可以检测数据的有效性
示例:

通过上面这段代码,我们可以通过选择设置或者不设置对应功能的函数,达到可读可写,只可读,只可写这三种效果。
练习:设计立方体类
- 设计立方体类
- 求出立方体的面积和体积
- 分别用全局函数和成员函数判断两个立方体是否相等
1.设计立方体类,2.求出立方体的面积和体积
#include<iostream>
using namespace std;
//创建立方体的类
class Cube
{
public://长void steL(int l){m_L = l;}int steL(){return m_L;}//宽void steW(int w){m_W = w;}int steW(){return m_W;}//高void steH(int h){m_H = h;}int steH(){return m_H;}//获取立方体面积int calculateS(){return 2*(m_H * m_L + m_H * m_W + m_L * m_W);}//获取立方体体积int calculateV(){return m_H * m_L * m_W;}
private:int m_L;//长int m_W;//宽int m_H;//高
};int main()
{//创建一个立方体的对象Cube c1;c1.steH(10);c1.steL(10);c1.steW(10);cout << c1.calculateS() << endl << c1.calculateV() << endl;//第二个立方体Cube c2;c2.steH(10);c2.steL(10);c2.steW(10);
}
运行结果:
3.分别用全局函数和成员函数判断两个立方体是否相等
全局函数
//利用全局函数做判断 两个立方体是否相等//位置:全局
bool isSame(Cube &c1, Cube &c2)
{
//面积和体积同时相等,说明是同一个立方体,长宽高的数值可以互相调换if ((c1.calculateS() == c2.calculateS()) && (c1.calculateV() == c1.calculateV())){return true;}return false;
}
bool ret=isSame(c1, c2);
if (ret)
{cout << "c1和c2是相等的" << endl;
}
else
{cout << "c1和c2是不相等的" << endl;
}
成员函数
bool isSameByClass(Cube&c)
{if ((calculateS() == c.calculateS()) && (calculateV() == c.calculateV()))//类内可以访问私有成员{return true;}return false;
}
完整代码:
#include<iostream>
using namespace std;
//创建立方体的类
class Cube
{
public://长void steL(int l){m_L = l;}int steL(){return m_L;}//宽void steW(int w){m_W = w;}int steW(){return m_W;}//高void steH(int h){m_H = h;}int steH(){return m_H;}//获取立方体面积int calculateS(){return 2*(m_H * m_L + m_H * m_W + m_L * m_W);}//获取立方体体积int calculateV(){return m_H * m_L * m_W;}//利用成员函数判断两个立方体是否相等bool isSameByClass(Cube&c){if ((calculateS() == c.calculateS()) && (calculateV() == c.calculateV()))//类内可以访问私有成员{return true;}return false;}
private:int m_L;//长int m_W;//宽int m_H;//高
};//利用全局函数做判断 两个立方体是否相等
bool isSame(Cube &c1, Cube &c2)
{if ((c1.calculateS() == c2.calculateS()) && (c1.calculateV() == c1.calculateV())){return true;}return false;
}
int main()
{//创建一个立方体的对象Cube c1;c1.steH(10);c1.steL(10);c1.steW(10);cout << c1.calculateS() << endl << c1.calculateV() << endl;//第二个立方体Cube c2;c2.steH(10);c2.steL(10);c2.steW(10);// bool ret=isSame(c1, c2);//if (ret)//{// cout << "c1和c2是相等的" << endl;//}//else//{// cout << "c1和c2是不相等的" << endl;//}bool ret = c1.isSameByClass(c2);if (ret){cout << "c1和c2是相等的" << endl;}else{cout << "c1和c2是不相等的" << endl;}system("pause");return 0;
}

相关文章:
c++:类和对象(1),封装
C面向对象的三大特性:封装、继承、多态。 封装 封装的意义一: 将属性和行为作为一个整体,表现生活中的事物将属性和行为加以权限控制 类中的属性和行为,我们统一称为成员 属性也叫: 成员属性 成员变量 行为也叫&a…...
三、安全工程—安全架构(CISSP)
目录 一、安全工程 1.企业安全架构与系统安全架构 2.通用企业架构框架 2.1 Zachman框架...
Linux:shell脚本:基础使用(9)《数组》
数组就是一组数据类型相同集合 定义 数组名(元素内容…………) 如果没有元素内容就是空 arr1() # 定义了一个空数组 arr2(1 2 3 4 5 6 ) # 定义了一个元素是整形的数组 arr3("hello" "world" "你好" "世界") # 定义了一个元素为字符…...
TCP高并发服务器简介(select、poll、epoll实现与区别)
select、poll、epoll三者的实现: select实现TCP高并发服务器的流程: 一、创建套接字(socket函数):二、填充服务器的网络信息结构体:三、套接字和服务器的网络信息结构体进行绑定(bind函数&…...
Linux中的软件包管理器yum
目录 1.什么是软件包 2.关于 rzsz 3.查看软件包 4.如何安装软件 5.如何卸载软件 1.什么是软件包 ● 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. ● 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理…...
如何使用支付宝沙箱环境本地配置模拟支付并结合内网穿透远程调试
文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂ÿ…...
解决子元素的click事件会触发父元素的dbclick事件
解决子元素的click事件会触发父元素的dbclick事件 方案一:方案二:方案三:方案一方案二综合案例如下: 方案一: 错误思路:通过阻止子元素click事件的冒泡,阻止父元素的dbclick 正确思路ÿ…...
算法训练营Day38(动态规划1)
动态规划理论基础 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 区别 动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心&…...
基于Harris角点的多视角图像全景拼接算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Harris角点检测 4.2 图像配准 4.3 图像变换和拼接 4.4 全景图像优化 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 function [ImageB…...
数学建模--PageRank算法的Python实现
文章目录 1. P a g e R a n k PageRank PageRank算法背景2. P a g e R a n k PageRank PageRank算法基础2.1. P a g e R a n k PageRank PageRank问题描述2.2.有向图模型2.3.随机游走模型 3. P a g e R a n k PageRank PageRank算法定义3.1. P a g e R a n k PageRank PageRank…...
samba服务搭建,并将共享目录映射到windows
系统版本:centos7 1、centos 安装samba yum -y install samba 2、查看安装信息 rpm -qa |grep samba 3、设置开机自启动 systemctl enable smb.service systemctl enable nmb.service 4、设置samba服务器配置文件 sudo vi /etc/samba/smb.conf 注意&#…...
golang 中使用 statik 将静态资源编译进二进制文件中
现在的很多程序都会提供一个 Dashboard 类似的页面用于查看程序状态并进行一些管理的功能,通常都不会很复杂,但是其中用到的图片和网页的一些静态资源,如果需要用户额外存放在一个目录,也不是很方便,如果能打包进程序发…...
北京住总集团携手云轴科技ZStack获行业云平台领航者创新实践奖
为进一步促进行业企业上云、用数、赋智发展,落实国家政策,加速云计算应用从互联网拓展至政务、金融、交通、电信等行业,推动以云计算为核心的数字产业创新,1月18日中国信息通信研究院主办的“企业上云用云专项行动会—行业云平台研…...
【漏洞攻击之文件上传条件竞争】
漏洞攻击之文件上传条件竞争 wzsc_文件上传漏洞现象与分析思路编写攻击脚本和重放措施中国蚁剑拿flag wzsc_文件上传 漏洞现象与分析 只有一个upload前端标签元素,并且上传任意文件都会跳转到upload.php页面,判定是一个apache容器,开始扫描…...
Buttton样式设置background属性失效的问题
最近遇到一个之前没有遇见的问题,就是在添加Button控件的时候发现对其设置background时没有效果,原因是AndroidStudio升级后默认按钮就是主题色,一个比较简单的方法是将Button改为android.widget.Button,对比效果如下:…...
使用vue-pdf插件加载pdf
安装: // 安装这个版本,其它版本会有千奇百怪的错,这个版本和4.0.0都是可以的 cnpm install vue-pdf4.2.0// 安装pdfjs-dist cnpm install pdfjs-dist2.5.207 使用: // 我的css样式是pxToRem,友友们使用可能样式会有…...
BP蓝图映射到C++笔记1
教程链接:示例1:CompleteQuest - 将蓝图转换为C (epicgames.com) 1.常用的引用需要记住,如图所示。 2.蓝图中可以调用C函数,也可以实现C函数 BlueprintImplementableEvent:C只创建,不实现,在蓝图中实现 B…...
龙芯+RT-Thread+LVGL实战笔记(30)——电子琴演奏
【写在前面】正值期末,笔者工作繁忙,因此本系列教程的更新频率有所放缓,还望订阅本专栏的朋友理解,请勿催更。笔者在此也简要声明几点: 有些硬件模块笔者并没有,如LED点阵、压力传感模块、RFID模块等,因此这些模块的相关任务暂时无法给出经过验证的代码。其实,教程进行…...
Python Process创建进程(2种方法)详解
虽然使用 os.fork() 方法可以启动多个进程,但这种方式显然不适合 Windows,而 Python 是跨平台的语言,所以 Python 绝不能仅仅局限于 Windows 系统,因此 Python 也提供了其他方式在 Windows 下创建新进程。 Python 在 multiproces…...
树莓派4B 使用树莓派官方烧录器烧录ubuntu20.04.5 排坑
问题描述: 使用树莓派官方烧录器烧录ubuntu并且在烧录器中设置了电脑热点,但是无法连接WIFI。重启后也无效。 排坑: 1.首先打开/boot中的network-config,发现烧录器设置的密码是乱码,重新设置; 2.有博主说…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
