一、封装的意义

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

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

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

类中的属性和行为统一称为成员,属性也称为成员属性或成员变量,行为也成为成员函数或成员方法;

//例1:设计一个圆类,求圆的周长
#include<iostream>
using namespace std;const double PI = 3.1415926;//class代表设计一个类,类后面紧跟着类名称
class Circle{//访问权限//公共权限public://属性int r;//行为double calcuPerimeter(){return 2 * PI * r;}
};int main(){//通过圆类,创建具体的圆对象Circle c1;//给圆对象的属性赋值c1.r = 10;cout << "Perimeter is " << c1.calcuPerimeter() << endl;system("Pause");return 0;
}

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

访问权限有三种

  1. public:公共权限,类内可以访问,类外可以访问
  2. protected:保护权限,类内可以访问,类外不可以访问
  3. private:私有权限,类内可以访问,类外不可以访问

保护权限和私有权限区别主要在继承方面,子类可以访问父类的保护权限,而私有权限不可访问

二、struct和class的区别

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

  • struct:默认权限为公有
  • class:默认权限为私有

尽管结构体可以包含成员函数,但它们很少这样做。所以,通常情况下,结构体声明只会声明成员变量。结构体声明通常不包括public或private的访问修饰符。

三、成员属性设置为私有

  • 将所有成员属性设置为私有,可以自己控制读写权限
  • 对于写权限,我们可以检测数据的有效性
例:
#include<iostream>
#include<string>
using namespace std;class Person{
public://设置姓名void setName(string name){m_Name = name;}//获取姓名string getName(){return m_Name;}//设置性别void setGender(string gender){if(gender == "Male" or gender == "Female"){m_Gender = gender;}else{cout << "Wrong Gender!" << endl;m_Gender = "Male";return;}}//获取性别string getGender(){return m_Gender;}//设置年龄void setAge(int age){m_Age = age;}private://姓名  可读可写string m_Name;//性别  可读可写 修改选项只能是 "Male" "Female"string m_Gender;//年龄  只写int m_Age;};int main(){Person p;p.setName("Huffie");cout << "Name:\t" << p.getName() << endl;p.setGender("Male");cout << "Gender:\t" << p.getGender() << endl;p.setAge(21);//cout << "年龄:" << p.getAge() << endl;system("Pause");return 0;
}

参考:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难
链接:https://www.bilibili.com/video/BV1et411b73Z

【C++笔记】封装的意义,结构体和类的区别相关推荐

  1. 【唐老狮】C#——结构体和类的区别

    [结构体和类的区别] 结构体是值类型,类是引用类型 结构体存在栈中,类存在堆中 结构体成员不能使用protected访问修饰符,而类可以 结构体成员变量申明不能指定初始值,而类可以 结构体不能申明无参 ...

  2. [C#]结构体和类的区别

    结构体和类的区别:     在做一个项目时,使用了较多的结构体,并且存在一些结构体的嵌套,即某结构体成员集合包含另一个结构体等,总是出现一些奇怪的错误,才终于下决心好好分析一下到底类和结构体有啥不同, ...

  3. 结构体和类的区别详细讲解

    结构体和类的区别 C的结构体和C++结构体的区别 C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数.所以C的结构体是没有构造函数.析构函数.和this指针的. C的结构体对 ...

  4. C#中的结构体与类的区别

    转载自:https://www.cnblogs.com/to-creat/p/5268729.html C#中的结构体与类的区别 经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自 ...

  5. C语言结构体与C++中结构体和类的区别

    在C++中除了类中可以有构造函数和析构函数外,结构体中也可以包含构造函数和析构函数,这是因为结构体和类基本雷同,唯一区别是,类中成员变量默认为私有,而结构体中则为公有.注意,C++中的结构体是可以有析 ...

  6. C#中结构体和类的区别

    结构体和类同样能够定义字段,方法和构造函数,都能实例化对象,这样看来结构体和类的功能好像是一样的了,但是他们在数据的存储上是不一样的 C#结构体和类的区别问题 这两种数据类型的本质区别主要是各自指向的 ...

  7. C++中结构体与类的区别介绍

    在参与以C++为编程基础的项目应用中总会遇到结构体类型与类的数据类型,但是其具体应用区别模糊不清 现将其区别总结如下,欢迎补充共同学习(先介绍C和C++中结构体的不同,再对比C++中结构体与类的区别) ...

  8. swift学习笔记(9)-结构体和类

    结构体和类对比 Swift 中类和结构体有很多共同点.共同处在于: * 定义属性用于存储值 * 定义方法用于提供功能 * 定义下标操作使得可以通过下标语法来访问实例所包含的值 * 定义构造器用于生成初 ...

  9. 结构体和类的区别-Objective-C基础

    1 结构体 与类的相同点 都可以将多个数据封装为1个整体 struct Date{ int year; int month; int day; } @interface Date :NSObject ...

  10. swift string转int_swift中结构体和类的区别(值类型和引用类型的区别)

    在swift中结构体和类有着更多的相同之处,在一般的使用中能够做到互相替换.我们可以先看看官方文档的描述: Unlike other programming languages, Swift does ...

最新文章

  1. 两帧点云刚性配准的ICP算法
  2. struts2入门(搭建环境、配置、示例)
  3. 使用nginx源代码编译安装lnmp
  4. myrocks复制中断问题排查
  5. C#反射之Assembly.Load,Assembly.LoadFile 与 Assembly.LoadFrom方法介绍
  6. redis开启redis_Redis聚类
  7. php基于错误的盲注,盲注基本原理
  8. 用计算机的知识服务社会,科研育人案例-董立红
  9. ASP.NET控件在2.0和1.1下运行的一个微小的差别
  10. PyQt5保姆级教程-- 从入门到精通
  11. 推荐一款好用的Bootstrap后台管理框架——inspinia
  12. 移动App | 个人隐私信息合规检测浅析及方法
  13. html5 视频缩略图,应用canvas获取video的缩略图
  14. 云计算中的Server Consolidation
  15. 什么是系统集成(SI)?
  16. 我的 OneNote 入门心得
  17. 小米将推出新款自研芯片
  18. 工厂设备管理远程监控方案
  19. C/C++编程:libcurl学习(linux + cmake windows10 + vs2019)
  20. 软件编程控制硬件的关键——寄存器

热门文章

  1. bzoj 4975: 区间翻转(博弈)
  2. manacher算法--最长回文子串
  3. 利用matlab自带函数快速提取二值图像的图像边缘 bwperim函数
  4. 吴恩达神经网络和深度学习-学习笔记-8-梯度消失与爆炸 + 梯度检测
  5. java图片亮度调整
  6. vivado和modelsim联合仿真实现分频器——2的n次方分频
  7. xilinx sdk用alt+?进行自动补全
  8. 一些比较好的慕课和教材的老师的对应关系(更新中~)
  9. 7.25 8figting!
  10. thinkphp3.2.3 自动验证 正则验证