【C++】4-1.10 c++类的抽象和封装

2021/4/18 14:25:27

本文主要是介绍【C++】4-1.10 c++类的抽象和封装,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

【C++】4-1.10 c++类的抽象和封装

  • 1.抽象
  • 2.封装

1.抽象

1.1 关于抽象的解释
在研究对象和系统时,为了更加专注于感兴趣的细节,去除对象或系统的物理或时空的细节、属性的过程,就是抽象;

简而言之:抽象就是提炼目标系统中我们关心的核心要素的过程;
比如对于矩形,我们关心的是边长,面积,我们进行抽象的时候就只关心这两个要素;

2.封装

封装指的是数据域的封装,什么是封装,为什么要封装数据,怎么封装?
2.1 什么是封装
下面从两个维度来解释:
一种实现数据和函数绑定的语言构造块,即class类,这种数据结构做数据封装;
一种限制直接访问对象组成部分的语言机制,即有属性权限之分;

简单来说,封装是绑定数据和函数的语言构造块,以及限制访问目标对象中的内容的手段;
比如对于矩形,我们限制对边长side的访问,把side成员放到私有属性中去,然后设置一个可以访问side成员的函数,并把这个函数放到公有属性中去,就实现了把side数据与函数绑定,最终实现了数据可以被相对安全的读和写,即实现了side数据的封装;

注意:
数据的封装目的,并非为了断了读写的途径,就像你收拾家,并不是把东西藏到万年都找不到。

2.2 为什么要封装
在定义class的时候,如果数据域采用public的形式,有以下问题:
2.2.1、数据可以被class类外的方法直接篡改;
2.2.2、上述问题,会导致class类出现不可预知的bug,维护比较麻烦;

2.3 怎么封装
将数据成员放到private私有属性里,这样实现外部无法直接更改的问题,
但是class类外,如何修改数据成员呢?
我们需要在公有属性里增加set、get函数,用于class外读写私有数据;

关于set、get函数:
2.3.1、get函数的一般样式

returnType getProperName(/*可以有参数*/){}
// 比如:double getSide(){}

如果是布尔类型时,样式如下:

bool isProperName(/*可以有参数*/){}
// 比如:bool isComplete(){}

2.3.2、set函数的一般样式

void setProperName(/*可以有参数*/){}
// 比如void setSide(){}


这篇关于【C++】4-1.10 c++类的抽象和封装的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程