C++ 类和对象 封装

文章介绍了C++中的面向对象编程特性,重点讲解了封装的概念和重要性,包括封装的意义、访问权限(public,protected,private)以及如何通过class和struct创建类。文中通过长方体类和圆类的案例,阐述了如何设计和使用成员属性以及成员函数,并探讨了分文件编写的重要性。
摘要由CSDN通过智能技术生成

1. 三大特性

C++面向对象的三大特性为:封装、继承、多态
C++认为万事万物都皆为对象,对象上有其属性和行为

例如:

​ 人可以作为对象,属性有姓名、年龄、身高、体重…,行为有走、跑、跳、吃饭、唱歌…

​ 车也可以作为对象,属性有轮胎、方向盘、车灯…,行为有载人、放音乐、放空调…

​ 具有相同性质的对象,我们可以抽象称为,人属于人类,车属于车类

理解: 每个对象抽象成一个类,一个类的所有对象都有相同的性质(属性)。就像有相同性质(属性和行为)的元素(对象)组合成一个集合(类)。

2.封装——C++面对对象三大特性之一

2.1 封装的意义

  • 将属性和行为作为一个整体,表现生活中的事物
  • 将属性和行为加以权限控制

2.1.1 封装意义一

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

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

案例1: 设计一个圆类,求圆的周长:
1)首先要明确求圆周长的公式,2 * Π * 半径,那么半径就可以做为圆的属性;
2)由于Π是一个常量,取3.14,并且不可以改变,所以可以直接定义一个全局常量,加入const修饰;
3)在这个案例当中不涉及圆心、周长,所以不添加这些属性。(也可以设计一个类通过圆周长求圆半径、直径)

设计类
1)类在C++中是“class”,语法:class 类名{ 访问权限: 属性 / 行为 };
2)在这个案例中的public是公共权限,表示类内或类外,都可以访问这个类的属性和行为,后续再讲访问权限
3)属性用一个变量来体现,行为通常用一个函数来体现
4)有圆类之后可以在main函数中通过圆来创建具体的圆,也就是创建对象
5)创建具体对象的语法:类 对象名;
6)对象的属性和行为通过“.”来访问
在这里插入图片描述

1)总结

1.设计类
class 类名
{
public:——公共权限,表示类内或类外,都可以访问这个类的属性和行为,
访问权限
属性——通常是变量
行为——通常是函数
};
2.实例化:通过一个类创建具体的对象
类名 对象名;
3.对象的属性和行为的获取,通过“.”访问
4.类中的属性和行为统称为成员;属性,也叫成员属性 成员变量;行为,也叫成员函数 成员方法

黑马老师-封装-属性行为

2)作业

设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
明确:属性是姓名和学号,行为是给姓名和学号赋值并显示。我把赋值和显示分开了,其实也可以一起输出
在这里插入图片描述
老师写的
在这里插入图片描述
黑马老师-设计学生类

2.1.2 封装意义二:

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

三种访问权限
  1. public 公共权限 成员 类内可以访问 类外可以访问
  2. protected 保护权限 成员 类内可以访问 类外不可以访问(继承时 父类的保护权限的内容,子类也可以访问)
  3. private 私有权限 成员 类内可以访问 类外不可以访问(继承时 父类的保护权限的内容,子类不可以访问)
    在这里插入图片描述
    在类外不可以访问私有权限和保护权限的内容,类内三种权限都可以访问
    黑马老师-访问权限

2.2 class和struct的区别

在C++中 struct和class唯一的区别就在于 默认的访问权限不同
区别:struct 默认权限为公共class 默认权限为私有
在这里插入图片描述
clas和struct

2.3 成员属性私有化

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

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

在这里插入图片描述
私有权限实现可写:通过一个公共权限下的设有形参的函数,并在类外传入参数实现可写操作;
实现可读:通过一个公共权限下的有返回值的函数,并在函数内返回需要的私有权限内容,实现可写操作
在这里插入图片描述
成员属性私有化

2.4 案例1-长方体类

1)要求

  1. 求出长方体的面积和体积
  2. 分别用全局函数和成员函数判断两个长方体是否相等。

2)实现

  1. 写一个长方体类,给长、宽、高赋值,并且类内的函数计算其面积、体积;
  2. 写一个全局函数,给长、宽、高赋值,计算其面积、体积;
  3. 两个输入相同的边长,都打印面积和体积,验证是否相等。

类的设计——自己写的
在这里插入图片描述
全局函数
在这里插入图片描述
验证
在这里插入图片描述

类的设计——老师写的
和老师写的主要区别在于:
1.用类创建了两个长方体;只创建了一个类
2.用全局函数判断是否相等使用bool值来判断真假;全局函数直接计算另一个面积和体积,直接输出判断
3.没有使用成员函数判断
把老师写的,跟着敲了一遍,在判断的地方做了调整。还有很大的进步空间!
在这里插入图片描述

在这里插入图片描述
全局判断函数
在这里插入图片描述
验证
在这里插入图片描述
符合预期
黑马老师-案例1-立方体类

2.5 案例2-点和圆的关系

1.思路

在这里插入图片描述

2.设计点类

在这里插入图片描述

3.设计圆类

在这里插入图片描述

4.全局函数的判断

在这里插入图片描述

5.实例化

在这里插入图片描述

6.总结:

这个案例主要值得学习的地方在于
1.再次熟悉类的创建和实例化的过程
2.通过点类和圆类的设计,要明白一个类可以做为另一个类的成员,比如点类可以做为圆类的成员
3.再次熟悉分文件编写和使用场景。自己写的时候把两个类写在一起,老师视频中提到这对之后大项目的开发不好,代码量会很大,所以老师用了分文编写
4.在头文件中写类成员函数的声明;在源文件中写类成员函数的实现,这里要加上局域

7.分文见编写

点类-头文件-成员函数的声明-不需要函数的实现
在这里插入图片描述
点类-源文件-成员函数的实现,加局域
源文件成员函数的实现
圆类-头文件
这里需要包含点类的头文件
在这里插入图片描述
圆类-源文件
在这里插入图片描述
最后在main函数中包含两个头文件即可
在这里插入图片描述
黑马老师-案例2-点和圆关系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值