C++类与对象之封装篇
2020-07-26 00:29
417 查看
C++类与对象之封装篇
一 . 封装的意义
封装是C++面向对象三大特性之一
封装的意义:
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制
封装的意义一
在设计类的时候,属性和行为写在一起,表现事物
语法:
class 类名{ 访问权限: 属性 / 行为 };
示例1: 设计一个圆类,求圆的周长
#include <iostream> using namespace std; //圆周率 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; //给圆对象的半径 进行赋值操作 //不过大家一般都喜欢用setValue()对成员进行赋值。后面详细讲解 //2 * pi * 10 = = 62.8 cout << "圆的周长为: " << c1.calculateZC() << endl; system("pause"); return 0; }
示例2: 设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
#include <iostream> using namespace std; //学生类 class Student { public: //公共权限 //属性 string m_name; int m_id; //类中的属性和行为 我们统一称为 成员 //属性 成员属性 成员变量 //行为 成员函数 成员方法 public: //行为 void setName(string name) { m_name = name; } void setID(int id) { m_id = id; } void showStudent() { cout << "name:" << m_name << " ID:" << m_id << endl; } }; int main() { //创建一个具体学生 实例化对象 Student stu; //stu.m_name = "张三"; stu.setName("张三"); stu.setID(100); stu.showStudent(); system("pause"); return 0; }
封装的意义二
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
- public 公共权限
- protected 保护权限
- private 私有权限
#include <iostream> using namespace std; //三种权限 //公共权限 public 类内可以访问 类外可以访问 //保护权限 protected 类内可以访问 类外不可以访问 儿子可以访问父亲中的保护内容 //私有权限 private 类内可以访问 类外不可以访问 儿子不能访问父亲中的私有内容 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; //私有权限类外访问不到 p.func(); system("pause"); 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.m_A = 10; //错误,访问权限是私有 C2 c2; c2.m_A = 10; //正确,访问权限是公共 system("pause"); return 0; }
三 . 成员属性一般设置为私有(权限)
优点1: 将所有成员属性设置为私有,可以自己控制读写权限
优点2: 对于写权限,我们可以检测数据的有效性
#include <iostream> using namespace std; class Person { public: //姓名设置可读可写(权限设置) void setName(string name) { m_Name = name; } string showName() { return m_Name; } //年龄设置可读可写((权限设置) void setAge(int age) { //检测数据有效性 if (age < 0 || age > 150) { cout << "输入年龄有误" << endl; return; } m_Age = age; } //获取年龄 int showAge() { return m_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.showName() << endl; //年龄设置 p.setAge(50); cout << "年龄: " << p.showAge() << endl; //爱人设置 p.setLover("小乖乖"); //cout << "爱人: " << p.m_Lover << endl; //只写属性,不可以读取 system("pause"); return 0; }
参考资料 :
https://www.bilibili.com/video/BV1et411b73Z
相关文章推荐
- c++类和类的封装,对象线程封装
- struts2.0 中的 批量封装对象(Bean)
- C++类对象内存模型2
- C++类与对象详解
- 三种简单写法教你Javascript对象封装
- 黑马程序员笔记——Java面向对象之封装
- C# 面向对象特性 封装 继承 多态
- Python--面向对象的程序设计之继承实现的原理(继承顺序)、封装、property
- Ajax使用方法,经典Ajax封装,可接收解析后台传回的json对象和json数组
- JAVA代码实现多级树结构封装对象
- C++类对象共享数据的两种实现方法
- 1、Java对象(字节码对象、实例对象)、特性(封装、继承、多态)、类加载
- 反射的应用 将form表单的数据自动封装为对象
- C++类和对象
- Java中面向对象特征之一封装
- C++类对象共享数据的5种实现方法
- 利用java反射将map值封装到对象中
- C++之面向对象程序设计的基本特点(抽象、封装、继承、多态)
- Delphi面向对象学习随笔四:继承与封装
- 黑马程序员----面向对象设计的封装、继承、多态特性