类和对象——封装

师从黑马程序员

封装

封装的意义一

在设计类的时候,属性和行为写在一起,表现事物

语法: class 类名{  访问权限:属性/行为  };

设计一个圆类,求圆的周长   代码:

示例1:

#include <iostream>
using namespace std;class Circle
{//访问权限//公共权限
public://属性//半径int m_r;//行为//获取圆的周长double calculateZC(){const float PI=3.14;return 2*PI*m_r;}
};int main()
{//通过圆类 创建具体的圆(对象)Circle c1;//给圆对象的属性进行赋值c1.m_r=10;cout<<"圆的周长为: "<<c1.calculateZC()<<endl;return 0;
}

示例2:

设计一个学生类,属性具有姓名和学号,姓名和学号可以赋值,并将其显示

#include <iostream>
using namespace std;class Student
{
public:// 定义构造函数,初始化姓名和学号Student(string name, int stuNum): m_name(name), m_stuNum(stuNum) {}// 姓名和学号的setter方法void setName(string name) { m_name = name; }void setStuNum(int stuNum) { m_stuNum = stuNum; }// 打印学生信息的方法void printStu(){cout << "学生姓名为:" << m_name << endl;cout << "学生学号为:" << m_stuNum << endl;}private:string m_name;int m_stuNum;
};int main()
{// 创建一个学生对象,并初始化姓名和学号Student s1("张三", 123456);// 调用打印学生信息的方法s1.printStu();return 0;
}

封装意义二:

类在设计时,可以把属性和行为放在不同的权限下,加以控制

访问权限有三种:

1、public   公共权限           成员  类内可以访问  类外可以访问

2、protected 保护权限        成员  类内可以访问  类外可以访问

3、private  私有权限           成员  类内可以访问  类外可以访问

#include <iostream>
using namespace std;class Person
{
public://公共权限string m_Name;//姓名
protected ://保护权限string m_Car;//汽车
private ://私有权限int m_Password;//银行卡密码
public :void func(){m_Name ="张三";m_Car ="拖拉机";m_Password=123456;}};int main()
{Person p1;p1.m_Name="李四";//p1.m_Car="奔驰";  //保护权限内容,在类外访问不到//p1.m_Password=123;// 私有权限内容,类外访问不到p1.func();return 0;
}

struct和class区别

在C++中,struct和class唯一的区别在于默认的访问权限不同

区别:

        struct默认权限为公共

        class默认权限为私有

#include <iostream>
using namespace std;class C1
{int m_A;
};struct C2
{int m_A;
};int main()
{C1 c1;// c1=100;  //在class里默认权限  私有,因此类外不可以访问C2 c2;c2=100;//在class里默认权限  公有,因此可以访问return 0;
}

成员属性设置为为私有

优点1:将所有成员属性设置为私有,可以自己控制读写权限

优点2:对于写权限,我们可以检测数据的有效性

#include <iostream>
#include<string >
using namespace std;class Person
{
public://设置姓名void setName(string name){m_Name=name;}//获取姓名string getName(){return m_Name;}//获取年龄int getAge(){return m_Age;}//设置年龄(0~150)void setAge(int age){if(age<0||age>150){cout<<"年龄输入有误,赋值失败"<<endl;return ;}m_Age=age;}//设置偶像void setIdol(string Idol){m_Idol=Idol;}
private:string m_Name; //姓名   可读可写int m_Age=18;  //年龄  只读  也可以写0~150string m_Idol;//偶像 只写
};
int main()
{Person p;//姓名设置p.setName("张三");//姓名获取cout<<"姓名: "<<p.getName()<<endl;//年龄设置p.setAge(160);//年龄获取cout<<"年龄: "<<p.getAge()<<endl;//只读//偶像设置p.setIdol("小明");//只写return 0;
}

联系案例1:设计立方体类

设计立方体类(Cube)

求出立方体的面积和体积

分别用全局函数和成员函数两个立方图是否相同

#include <iostream>
#include<string>
using namespace std;class Cube
{
private:int m_A;
public:// 构造函数初始化边长Cube(int A) : m_A(A) {}// 设置边长的成员函数void setA(int A){m_A = A;}// 获取边长的成员函数int getA(){return m_A;}// 计算面积的成员函数int getArea(){return m_A * m_A;}// 计算体积的成员函数int getVolume(){return m_A * m_A * m_A;}// 成员函数判断当前立方体与另一个立方体是否相同bool isSameCube(const Cube& other){return m_A == other.m_A;}
};// 全局函数判断两个立方体是否相同
bool areCubesSame(Cube c1, Cube c2)
{return c1.getA() == c2.getA();
}int main()
{Cube c1(10);Cube c2(5);cout << "立方体c1的边长为:" << c1.getA() << endl;cout << "立方体c1的面积为:" << c1.getArea() << endl;cout << "立方体c1的体积为:" << c1.getVolume() << endl;cout << "立方体c2的边长为:" << c2.getA() << endl;cout << "立方体c2的面积为:" << c2.getArea() << endl;cout << "立方体c2的体积为:" << c2.getVolume() << endl;// 使用成员函数判断是否相同cout << "成员函数判断:c1和c2是否相同?" << (c1.isSameCube(c2) ? "是" : "否") << endl;// 使用全局函数判断是否相同cout << "全局函数判断:c1和c2是否相同?" << (areCubesSame(c1, c2) ? "是" : "否") << endl;return 0;
}

联系案例2:点和圆的关系

设计一个圆形类(Circle)和一个电类(Point),计算点和圆的关系

#include <iostream>
using namespace std;
//点类
class Point
{
public://设置Xvoid setX(int x){m_X=x;}//获取Xint getX(){return m_X;}//设置Yvoid setY(int y){m_Y=y;}//获取Xint getY(){return m_Y;}private :int m_X;int m_Y;
};
//圆类
class Circle
{
public://设置半径void setR(int r){m_R=r;}//获取半径int getR(){return m_R;}//设置圆心void setCenter(Point center){m_Center=center;}//获取圆心Point getCenter(){return m_Center;}
private :int m_R;//半径//在类中可以让另一个类 作为本来中的成员Point m_Center;//圆心
};
//判断电和圆的关系
void isInCircle(Circle &c,Point &p)
{//两点间距离的平方int distance=(c.getCenter().getX()-p.getX())*(c.getCenter().getX()-p.getX())+(c.getCenter().getY()-p.getY())*(c.getCenter().getY()-p.getY());//半径的平方int rDistance=c.getR()*c.getR();//判断关系if (distance==rDistance){cout<<"点在圆上"<<endl;}else if(distance>rDistance){cout<<"点在圆外"<<endl;}else{cout<<"点在圆内"<<endl;}
}
int main()
{//创建圆Circle c;c.setR(10);Point center;center.setX(10);center.setY(0);c.setCenter(center);//创建点Point p;p.setX(10);p.setY(10);//判断关系isInCircle(c,p);return 0;
}

 若有侵权,请联系作者

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

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

相关文章

1 月 NFT 市场动态:Polygon 增长,Mooar 崛起,TinFun 掀起文化浪潮

作者&#xff1a;stellafootprint.network 数据源&#xff1a;NFT Research - Footprint Analytics 2024 年 1 月&#xff0c;加密货币与 NFT 市场迎来了重要的转折点&#xff0c;其中美国首批现货比特币 ETF 的亮相尤为引人注目&#xff0c;这一金融一体化的里程碑事件吸引了…

论文阅读-One for All : 动态多租户边缘云平台的统一工作负载预测

论文名称&#xff1a;One for All: Unified Workload Prediction for Dynamic Multi-tenant Edge Cloud Platforms 摘要 多租户边缘云平台中的工作负载预测对于高效的应用部署和资源供给至关重要。然而&#xff0c;在多租户边缘云平台中&#xff0c;异构的应用模式、可变的基…

【C/C++】2024春晚刘谦春晚魔术步骤模拟+暴力破解

在这个特别的除夕夜&#xff0c;我们不仅享受了与家人的温馨团聚&#xff0c;还被电视机前的春节联欢晚会深深吸引。特别是&#xff0c;魔术师刘谦的精彩表演&#xff0c;为我们带来了一场视觉和心灵的盛宴。在我的博客“【C/C】2024春晚刘谦春晚魔术步骤模拟暴力破解”中&…

c#cad 创建-直线(五)

运行环境 vs2022 c# cad2016 调试成功 一、代码说明 这段代码是用于在AutoCAD中创建一条直线。首先获取当前活动文档和数据库的引用&#xff0c;然后创建一个编辑器对象用于提示用户输入。接下来&#xff0c;在一个事务中获取模型空间的块表记录&#xff0c;并定义直线的长度…

「数据结构」哈希表2:实现哈希表

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;Java数据结构 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 实现哈希表 &#x1f349;扩容&#x1f349;插入&#x1f349;获取value&#x1f349;源码 &#x1f349;扩容 在讲插入之前需要…

Hive的Join连接、谓词下推

前言 Hive-3.1.2版本支持6种join语法。分别是&#xff1a;inner join&#xff08;内连接&#xff09;、left join&#xff08;左连接&#xff09;、right join&#xff08;右连接&#xff09;、full outer join&#xff08;全外连接&#xff09;、left semi join&#xff08;左…

求路径/步骤(前缀)

紧急救援 作为一个城市的应急救援队伍的负责人&#xff0c;你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候&#xff0c;你的任务…

docker磁盘不足!已解决~

目录 &#x1f35f;1.查看docker镜像目录 &#x1f9c2;2.停止docker服务 &#x1f953;3.创建新的目录 &#x1f32d;4.迁移目录 &#x1f37f;5.编辑迁移的目录 &#x1f95e;6.重新加载docker &#x1f354;7.检擦docker新目录 &#x1f373;8.删掉旧目录 1.查看doc…

Vulnhub靶场 DC-8

目录 一、环境搭建 二、信息收集 1、主机发现 2、指纹识别 三、漏洞复现 1、SQL注入 sqlmap工具 2、dirsearch目录探测 3、反弹shell 4、提权 exim4 5、获取flag 四、总结 一、环境搭建 Vulnhub靶机下载&#xff1a; 官网地址&#xff1a;https://download.vulnhub.com/dc/DC-…

鸿蒙开发系列教程(十八)--页面内动画(1)

页面内的动画 显示动画 语法&#xff1a;animateTo(value: AnimateParam, event: () > void): void 第一个参数指定动画参数 第二个参数为动画的闭包函数。 如&#xff1a;animateTo({ duration: 1000, curve: Curve.EaseInOut }, () > {动画代码}&#xff09; dura…

ubuntu22.04下使用conda安装pytorch(cpu及gpu版本)

本文介绍了conda下安装cpu、gpu版本的pytorch&#xff1b;并介绍了如何设置镜像源 ubuntu环境安装pytorch的CPU版本与GPU版本 系统&#xff1a;ubuntu22.04 显卡&#xff1a;RTX 3050 依赖工具&#xff1a;miniconda 确认环境 lsb_release -a No LSB modules are available.…

软件测试-测试用例研究-如何编写一份优秀的测试用例

什么是测试用例 测试用例是一组由测试输入、执行条件、预期结果等要素组成&#xff0c;以完成对某个特定需求或者目标测试的数据&#xff0c;体现测试方案、方法、技术和策略的文档。测试用例是软件测试的核心&#xff0c;它把测试系统的操作步骤用文档的形式描述出来&#xf…

安装Centos系统

1.镜像安装 镜像安装:Centos7安装 2.安装过程(直接以图的形式呈现) 选择你已经下载好的镜像 回车即可,等待安装 等待安装即可

2月7号寒假作业

第七章 运算符重载 一、填空题 1、在下列程序的空格处填上适当的字句&#xff0c;使输出为&#xff1a;0&#xff0c;2&#xff0c;10。 #include <iostream> #include <math.h> class Magic {double x; public: Magic(double d0.00):x(fabs(d)) {} Mag…

华为机考入门python3--(13)牛客13-句子逆序

分类&#xff1a;列表 知识点&#xff1a; 列表逆序&#xff08;和字符串逆序是一样的&#xff09; my_list[::-1] 题目来自【牛客】 def reverse_sentence(sentence): # 将输入的句子分割words sentence.split() # 将单词逆序排列 words words[::-1] # 将单词用空…

算法刷题 DAY50

70.爬楼梯 int climbStairs(int n) {int dp[50] {0};//dp[i]代表上到该楼梯有多少种方法// dp[0]无意义dp[1] 1;d[2] 2;if (n 1 || n 2)return dp[n];for (int i 3; i < n; i) {//从3开始dp[i] dp[i - 2] dp[i - 1];}return dp[n]; } 746. 使用最小花费爬楼梯 //…

VueCLI核心知识1:ref属性、props配置、mixin混入

1 ref 属性 ref属性类似于js原生获取DOM元素 <template><div><h1 v-text"msg" ref"title"></h1><button click"showDom">点我输出上方的Dom元素</button><School ref"sch"></School>…

漫漫数学之旅018

文章目录 经典格言数学习题古今评注名人小传 - 库尔特哥德尔 经典格言 一个毫无自由的社会——一个人凡事都要遵循严格统一的规则——将在行为上既不一致也不完全&#xff0c;甚至不能解决某些也许很重要的问题。——库尔特哥德尔&#xff08;Kurt Gdel&#xff09; 库尔特哥德…

Linux_信号

一个进程退出有两种情况&#xff1a;1.正常执行完毕。2.程序执行中异常退出。第一种情况可以通过进程退出码来获取进程执行结果&#xff0c;第二种情况需要通过信号来判断进程异常退出原因。那么进程在什么样的条件下会产生信号&#xff0c;进程又是怎样处理产生的信号呢&#…

算法沉淀——字符串(leetcode真题剖析)

算法沉淀——字符串 01.最长公共前缀02.最长回文子串03.二进制求和04.字符串相乘 01.最长公共前缀 题目链接&#xff1a;https://leetcode.cn/problems/longest-common-prefix/ 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串…