视频地址:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili

目录

P99类和对象-封装-属性和行为作为整体

P100类和对象-封装-案例-设计学生类

P101类和对象-封装-访问权限

P102类和对象-封装-C++中class和struct的区别

P103类和对象-封装-成员属性私有化

P104类和对象-封装-设计案例1-立方体类


C++面向对象的三大特性为:封装、继承、多态

C++认为==万事万物都皆为对象==,对象上有其属性和行为

例如:

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

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

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

P99类和对象-封装-属性和行为作为整体

封装的意义:

  • 将属性和行为作为一个整体,表现生活中的事物

  • 将属性和行为加以权限控制

封装意义一:

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

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

示例1:设计一个圆类,求圆的周长

using namespace std;
#include<iostream>//圆周率
const double PI = 3.14;//1、封装的意义
//将属性和行为作为一个整体,用来表现生活中的事物//封装一个圆类,求圆的周长
//class代表设计一个类,后面跟着的是类名
class Circle
{
public:  //访问权限  公共的权限//属性int m_r;//半径//行为//获取到圆的周长double calculateZC(){//2 * pi  * r//获取圆的周长return  2 * PI * m_r;}
};int main() {//通过圆类,创建圆的对象// c1就是一个具体的圆Circle c1;c1.m_r = 10; //给圆对象的半径 进行赋值操作//2 * pi * 10 = = 62.8cout << "圆的周长为: " << c1.calculateZC() << endl;system("pause");return 0;
}

P100类和对象-封装-案例-设计学生类

示例2:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号

using namespace std;
#include<iostream>class Student {
public:string name;int stu_id;void show() {cout << "姓名:" << name << endl;cout << "学号:" << stu_id << endl;}
};
int main() {Student s1;s1.name = "哈哈哈";s1.stu_id = 12;s1.show();
}

结果:

P101类和对象-封装-访问权限

封装意义二:

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

访问权限有三种:

  1. public      公共权限       成员类内可以访问,类外也可以访问

  2. protected 保护权限       成员类内可以访问,类外不可以访问  儿子可访问父亲保护内容

  3. private      私有权限       成员类内可以访问,类外不可以访问 儿子不可访问父亲私有内容

using namespace std;
#include<iostream>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 p;p.m_Name = "李四";//p.m_Car = "奔驰";  //保护权限类外访问不到//p.m_Password = 123; //私有权限类外访问不到system("pause");return 0;
}

P102类和对象-封装-C++中class和struct的区别

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

区别:

  • struct 默认权限为公共

  • class 默认权限为私有

示例:

class C1
{int  m_A; //默认是私有权限
};struct C2
{int m_A;  //默认是公共权限
};int main() {C1 c1;c1.m_A = 10; //错误,访问权限是私有C2 c2;c2.m_A = 10; //正确,访问权限是公共system("pause");return 0;
}

P103类和对象-封装-成员属性私有化

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

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

示例:

class Person {
public://姓名设置可读可写void setName(string name) {m_Name = name;}string getName(){return m_Name;}//获取年龄 int getAge() {return m_Age;}//设置年龄void setAge(int age) {if (age < 0 || age > 150) {cout << "你个老妖精!" << endl;return;}m_Age = age;}//情人设置为只写void setLover(string lover) {m_Lover = lover;}private:string m_Name; //可读可写  姓名int m_Age; //可读可写  年龄string m_Lover; //只写  情人
};int main() {Person p;//姓名设置p.setName("张三");cout << "姓名: " << p.getName() << endl;//年龄设置p.setAge(50);cout << "年龄: " << p.getAge() << endl;//情人设置p.setLover("苍井");//cout << "情人: " << p.m_Lover << endl;  //只写属性,不可以读取system("pause");return 0;
}

P104类和对象-封装-设计案例1-立方体类

设计立方体类(Cube),求出立方体的面积和体积,分别用全局函数和成员函数判断两个立方体是否相等。

using namespace std;
#include<iostream>//立方体类设计
//1、创建立方体
//2、设计属性
//3、设计行为 获取立方体面积和体积
//4、分别利用全局函数和成员函数 判断两个立方体是否相等class Cube {
public://设置长void SetL(int L){m_L = L;}//获取长int GetL() {return m_L;}//设置宽void SetW(int W) {m_W = W;}//获取宽int GetW() {return m_W;}//设置高void SetH(int H) {m_H = H;}//获取高int GetH() {return m_H;}//获取立方体面积int getS() {return 2 * m_L * m_W + 2 * m_L * m_H + 2 * m_H * m_W;}//获取立方体体积int getV() {return m_L * m_W * m_H;}//利用成员函数判断两个立方体是否相等bool isSamebyclass(Cube& c) {if (m_L == c.GetL() && m_W == c.GetW() && m_H == c.GetH()) {return true;}return false;}private:int m_L;int m_W;int m_H;};
//利用全局函数判断两个立方体是否相等
bool isSame(Cube &c1,Cube c2) {if (c1.GetL() == c2.GetL() && c1.GetW() == c2.GetW() && c1.GetH() == c2.GetH()){return true;}return false;}int main() {//创建立方体对象Cube c1;c1.SetL(10);c1.SetW(10);c1.SetH(10);cout << "c1的面积为:" << c1.getS() << endl;cout << "c1的体积为:" << c1.getV() << endl;//创建第二个立方体Cube c2;c2.SetL(10);c2.SetW(10);c2.SetH(10);//利用全局函数判断bool ret = isSame(c1, c2);if (ret) {cout << "ret c1和c2是相等的" << endl;}else{cout << "ret c1和c2是不相等的" << endl;}//利用成员函数判断bool ret1 = c1.isSamebyclass(c2);if (ret1) {cout << "ret1 c1和c2是相等的" << endl;}else{cout << "ret1 c1和c2是不相等的" << endl;}system("pause");return 0;
}

结果:

[黑马程序员C++笔记]P99-P104类和对象-封装相关推荐

  1. [黑马程序员C++笔记]P72-P83通讯录管理系统

    目录 系统需求 1.菜单功能 2.退出功能 3.添加联系人 (1)​​​​​​​设计联系人结构体 (2) 设计通讯录结构体 ​​​​​​​(3)main函数中创建通讯录 (4)封装添加联系人函数 (5 ...

  2. [黑马程序员C++笔记]P72-P83通讯录管理系统总体概览

    系统需求 通讯录是一个可以记录亲人.好友信息的工具. 本教程主要利用C++来实现一个通讯录管理系统 系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名.性别.年龄.联系电话.家 ...

  3. 黑马程序员jvm笔记总集

    黑马程序员jvm笔记(一)–程序计数器 虚拟机栈 堆 黑马程序员jvm笔记(二)–方法区 串池 直接内存 黑马程序员jvm笔记(三)–垃圾回收部分心得 黑马程序员jvm笔记(四)–字节码部分心得 黑马 ...

  4. SpringCloud学习笔记,课程源自黑马程序员,笔记持续更新中...

    @SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式: 学习内容 1.服务拆分-服务远程调用: 2.搭建eureka服务: 2.1.eureka服务注册-client 2 ...

  5. 黑马程序员C++笔记

    C++ 课程链接: 黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili 一.C++基础语法 1.变量和常量数据 1.1第一个C++程序 编写一个C++程序总共分 ...

  6. 黑马程序员_MongoDB笔记

    根据黑马程序员的课程资料整理所得,仅用于学习使用,如有侵权,请联系删除 1.MongoDB简单介绍 1.1 MongoDB应用场景 应对三高需求 High performance - 对数据库高并发读 ...

  7. 黑马程序员SSM_MybatisPlus笔记(自用)

    MP_1_MybatisPlus简介 1.入门案例 MybatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发.提供效率. 开发方式:基于SpringBoot使用M ...

  8. 零基础学C++——黑马程序员课程笔记(C++核心编程篇)

    封面来自互联网侵删 视频地址:点击访问 (我这里开发工具选用VSstudio) 此笔记有三个系列: C++基础语法入门篇 点击查看 C++核心编程篇 C++提高编程篇 本阶段主要针对C++面向对象编程 ...

  9. 黑马程序员SSM_Spring笔记(自用)

    根据黑马程序员的课程资料整理所得,仅用于学习使用,如有侵权,请联系删除 目录 Spring Framework(以下简称Spring) Spring的系统架构 Spring_核心概念及入门案例 1.I ...

最新文章

  1. 语义SLAM近5年主要技术进展及研究趋势
  2. 共享上网 路由器设置图解
  3. c++中algorithm头文件、STL库简介及使用说明
  4. C 的16个大坑,你能躲过几个?
  5. 什么是Spring?Spring是什么?
  6. mkv210_image.c详解
  7. C#中const和readonly的区别
  8. 客户端脚本selectivizr,PIE,Respond.js
  9. 软件需求模式阅读笔记之一
  10. EasyUI 1.5.x Of Insdep Theme 1.0.0 RC1 美化主题大包已发布
  11. C/C++实现的游戏角色名称名字随机生成代码
  12. 我如何构建一个交互式仪表板Web应用程序以可视化拳击数据
  13. SEO人员,三思而后行,要规避为哪些行业做SEO?
  14. 快狗打车CTO沈剑:数据库架构一致性最佳实践
  15. 支付宝APP支付 (JAVA生成支付信息,uniapp拉起支付宝支付)
  16. 小丸子学MongoDB系列之——安装MongoDB
  17. python传输视频文件_Python视频传输
  18. 人工智能,离我们还远么?
  19. led灯条维修_LED灯坏了别着急,三种故障的解决方案在这里
  20. [Python]*用随机数模拟抛硬币

热门文章

  1. 【C语言】数组(一维数组、二维数组)
  2. 相机标定(基础)20221204
  3. 冰河的高并发电子书开源啦(文末免费领取)!!
  4. Spark的spark-*和blockmgr-*目录里是什东西,怎么来的
  5. KVM和Xen虚拟化有什么区别?Xen和KVM优缺点对比
  6. 省时省力,高速收费站无线组网解决方案
  7. CXF之Features
  8. Cacti登录密码忘记,重置Cacti密码
  9. Direct3D显示视频
  10. 分享几个实用的chatgpt网址