【C++笔记】封装的意义,结构体和类的区别
一、封装的意义
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制
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 类在设计时,可以把属性和行为放在不同的权限下加以控制
访问权限有三种
- public:公共权限,类内可以访问,类外可以访问
- protected:保护权限,类内可以访问,类外不可以访问
- 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++笔记】封装的意义,结构体和类的区别相关推荐
- 【唐老狮】C#——结构体和类的区别
[结构体和类的区别] 结构体是值类型,类是引用类型 结构体存在栈中,类存在堆中 结构体成员不能使用protected访问修饰符,而类可以 结构体成员变量申明不能指定初始值,而类可以 结构体不能申明无参 ...
- [C#]结构体和类的区别
结构体和类的区别: 在做一个项目时,使用了较多的结构体,并且存在一些结构体的嵌套,即某结构体成员集合包含另一个结构体等,总是出现一些奇怪的错误,才终于下决心好好分析一下到底类和结构体有啥不同, ...
- 结构体和类的区别详细讲解
结构体和类的区别 C的结构体和C++结构体的区别 C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数.所以C的结构体是没有构造函数.析构函数.和this指针的. C的结构体对 ...
- C#中的结构体与类的区别
转载自:https://www.cnblogs.com/to-creat/p/5268729.html C#中的结构体与类的区别 经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自 ...
- C语言结构体与C++中结构体和类的区别
在C++中除了类中可以有构造函数和析构函数外,结构体中也可以包含构造函数和析构函数,这是因为结构体和类基本雷同,唯一区别是,类中成员变量默认为私有,而结构体中则为公有.注意,C++中的结构体是可以有析 ...
- C#中结构体和类的区别
结构体和类同样能够定义字段,方法和构造函数,都能实例化对象,这样看来结构体和类的功能好像是一样的了,但是他们在数据的存储上是不一样的 C#结构体和类的区别问题 这两种数据类型的本质区别主要是各自指向的 ...
- C++中结构体与类的区别介绍
在参与以C++为编程基础的项目应用中总会遇到结构体类型与类的数据类型,但是其具体应用区别模糊不清 现将其区别总结如下,欢迎补充共同学习(先介绍C和C++中结构体的不同,再对比C++中结构体与类的区别) ...
- swift学习笔记(9)-结构体和类
结构体和类对比 Swift 中类和结构体有很多共同点.共同处在于: * 定义属性用于存储值 * 定义方法用于提供功能 * 定义下标操作使得可以通过下标语法来访问实例所包含的值 * 定义构造器用于生成初 ...
- 结构体和类的区别-Objective-C基础
1 结构体 与类的相同点 都可以将多个数据封装为1个整体 struct Date{ int year; int month; int day; } @interface Date :NSObject ...
- swift string转int_swift中结构体和类的区别(值类型和引用类型的区别)
在swift中结构体和类有着更多的相同之处,在一般的使用中能够做到互相替换.我们可以先看看官方文档的描述: Unlike other programming languages, Swift does ...
最新文章
- 两帧点云刚性配准的ICP算法
- struts2入门(搭建环境、配置、示例)
- 使用nginx源代码编译安装lnmp
- myrocks复制中断问题排查
- C#反射之Assembly.Load,Assembly.LoadFile 与 Assembly.LoadFrom方法介绍
- redis开启redis_Redis聚类
- php基于错误的盲注,盲注基本原理
- 用计算机的知识服务社会,科研育人案例-董立红
- ASP.NET控件在2.0和1.1下运行的一个微小的差别
- PyQt5保姆级教程-- 从入门到精通
- 推荐一款好用的Bootstrap后台管理框架——inspinia
- 移动App | 个人隐私信息合规检测浅析及方法
- html5 视频缩略图,应用canvas获取video的缩略图
- 云计算中的Server Consolidation
- 什么是系统集成(SI)?
- 我的 OneNote 入门心得
- 小米将推出新款自研芯片
- 工厂设备管理远程监控方案
- C/C++编程:libcurl学习(linux + cmake windows10 + vs2019)
- 软件编程控制硬件的关键——寄存器