C++中封装与信息隐藏的详解及其作用介绍
目录
- 概述
- 类的公用接口
- 类的私有实现
- 方法与消息
概述
封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念. 这样能避免受到外界干扰和误用.
数据隐藏包括数据封装和数据抽象两部分. 数据封装是一种把数据和操作数据的函数捆绑在一起的机制. 数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制.
类的公用接口
C++ 通过类来实现封装性, 把数据和与这些数据有关的操作封装在一个类中. 在声明了一个类以后, 用户主要是通过调用公用的成员函数来实现类提供的功能, 称为消息传递.
公用成员函数是用户使用类的公用接口 (public interface), 或者说是类的对外接口. 在类外不能直接访问私有数据成员, 但可以通过调用公用成员函数来引用甚至修改私有数据成员.
类的私有实现
用户不必关系这些功能实现的细节, 而只需要知道调用哪个函数会得到什么结果, 实现什么功能即可. 通过成员函数对数据成员进行操作称为类的实现. 实现的细节对用户是隐蔽的. (信息隐藏)
类中被操作的数据是私有的, 实现的细节对用户是隐蔽的. 这称为私有实现. (private implementation)
类的公用接口与私有实现的分离形成了信息隐蔽. 将接口与实现分离是软件工程的一个最基本的原则.
优点:
- 如果想扩充累的功能, 只需要修改本类中有关的数据成员和它有关的成员函数. 程序中类外的部分可以不必修改
- 如果在编译时发现类中的数据读写有错, 不必检查整个程序. 只需检查本类中访问这些数据的少数成员函数
方法与消息
方法 (method) 指类的成员函数在面向对象程序理论中被称为方法, 是指对数据的操作. 一个 “方法” 对应一种操作. 只有被声明为公用的方法才能被外界所激活.
消息指对公用函数的调用. 外界是通过发 “消息” 来激活有关方法的. 调用对象的成员函数, 就是向对象发出的一个 “消息”. 通知它执行其中的方法.
面向对象的特点:
- 封装性: 各个对象间相对独立
- 抽象性: 类是对象的抽象, 对象是类的实例
- 继承性: 解决重用问题
- 多态性: 由继承产生的相关的不同的类. 其对象对同一消息会做出不同的响应
到此这篇关于C++中封装与信息隐藏的详解及其作用介绍的文章就介绍到这了,更多相关C++ 封装 信息隐藏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
C++封装线程类的实现方法
本文实例讲述了C++封装线程类的实现方法.分享给大家供大家参考.具体方法如下: 复制代码 代码如下: // 给主窗口的通知消息 #define WM_CUTTERSTART WM_USER + 100 // wParam == xxx lParam==xxxx /* 外面调用这个类时,只需要IsRunning() Startxxx(xxx) Suspendxxx() Resumexxx() Stopxxx() */ /* m_bContinue在真正的工作代码Do
-
C++自定义封装socket操作业务类完整实例
本文实例讲述了C++自定义封装socket操作业务类.分享给大家供大家参考,具体如下: Linux下C++封装socket操作的工具类(自己实现) socketconnector.h #ifndef SOCKETCONNECTOR_H #define SOCKETCONNECTOR_H #include "global.h" using namespace std; class SocketConnector { public: typedef enum { ENormal, EOth
-
C/C++程序开发中实现信息隐藏的三种类型
无论是模块化设计,还是面向对象设计,还是分层设计,实现子系统内部信息的对外隐藏都是最关键的内在要求.以本人浅显的经验,把信息隐藏按照程度的不同分成(1)不可见不可用(2)可见不可用(3)可见可用. 1 不可见不可用 就是说模块内部的变量.结构体.类定义对外部而已完全隐藏,外部对此一无所知.常用的实现方法就是利用不透明指针,请参见我的博文C语言开发函数库时利用不透明指针对外隐藏结构体细节. 这种方法同样适用于C++语言,一种可能的实现方式为面向接口编程. 头文件 IMyClass.h class
-
C++动态数组类的封装实例
C++中的动态数组(Dynamic Array)是指动态分配的.可以根据需求动态增长占用内存的数组.为了实现一个动态数组类的封装,我们需要考虑几个问题:new/delete的使用.内存分配策略.类的四大函数(构造函数.拷贝构造函数.拷贝赋值运算符.析构函数).运算符的重载.涉及到的知识点很多,对此本文只做简单的介绍. 一.内存分配策略 当用new为一个动态数组申请一块内存时,数组中的元素是连续存储的,例如 vector和string.当向一个动态数组添加元素时,如果没有空间容纳新元素,不可能简单
-
深入解析C++编程中类的封装特性
共用接口和私有实现的分离 C++通过类来实现封装性,把数据和与这些数据有关的操作封装在一个类中,或者说,类的作用是把数据和算法封装在用户声明的抽象数据类型中. 实际上用户往往并不关心类的内部是如何实现的,而只需知道调用哪个函数会得到什么结果,能实现什么功能即可. 在声明了一个类以后,用户主要是通过调用公用的成员函数来实现类提供的功能(例如对数据成员设置值,显示数据成员的值,对数据进行加工等).因此,公用成员函数是用户使用类的公用接口(public interface),或者说是类的对外接口. 类
-
详细分析C++ 数据封装和数据抽象
C++ 数据封装 所有的 C++ 程序都有以下两个基本要素: 程序语句(代码):这是程序中执行动作的部分,它们被称为函数. 程序数据:数据是程序的信息,会受到程序函数的影响. 封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全.数据封装引申出了另一个重要的 OOP 概念,即数据隐藏. 数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制. C++ 通过创建类来支持封装和数
-
C++中封装与信息隐藏的详解及其作用介绍
目录 概述 类的公用接口 类的私有实现 方法与消息 概述 封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念. 这样能避免受到外界干扰和误用. 数据隐藏包括数据封装和数据抽象两部分. 数据封装是一种把数据和操作数据的函数捆绑在一起的机制. 数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制. 类的公用接口 C++ 通过类来实现封装性, 把数据和与这些数据有关的操作封装在一个类中. 在声明了一个类以后, 用户主要是通过调用公用的成员函数来实现类提供的功能, 称为消息传递.
-
Android4.X中SIM卡信息初始化过程详解
本文实例讲述了Android4.X中SIM卡信息初始化过程详解.分享给大家供大家参考,具体如下: Phone 对象初始化的过程中,会加载SIM卡的部分数据信息,这些信息会保存在IccRecords 和 AdnRecordCache 中.SIM卡的数据信息的初始化过程主要分为如下几个步骤 1.RIL 和 UiccController 建立监听关系 ,SIM卡状态发生变化时,UiccController 第一个去处理. Phone 应用初始化 Phone 对象时会建立一个 RIL 和UiccCont
-
C++中友元的详解及其作用介绍
目录 概述 友元 普通的友元函数 友元成员函数 友元类 总结 概述 类的友元函数 (friend) 是定义在类外部, 但是有权限访问类的所有私有 (private) 成员和保护 (protected) 成员. 友元 我们先来复习一下公有成员和私有成员的概念: 公有成员 (public) : 在类外可以访问 私有成员 (private): 只有本类中的函数可以访问 友元 (friend) 可以访问与其有好友关系的类中的私有成员 (有限制的共享). 友元包括友元函数和友元类: 友元函数: 如果在本类
-
C/C++中异常处理详解及其作用介绍
目录 概述 异常处理 异常处理机制 函数声明指定异常 练习 案例一 案例二 概述 作为一名专业写 Bug, 编程一天改 bug 一周的程序媛. 学会异常处理是非常重要的. 我们不仅要考虑没有错误的理想情况, 更要考虑存在错误时的情况. Debug 可以帮助我们尽快发现错误, 消除错误. 错误类别: 语法错误 运行错误 逻辑错误 异常处理 设计程序时, 事先分析程序运行时可能出现的各种意外情况, 定制出相应的处理方法. 异常处理指对运行时出现的差错以及其他例外情况的处理. 没有异常处理程序时, 运
-
C/C++中I/O进阶详解及其作用介绍
目录 概述 I/O 类库 I/O 中的重载 流对象 标准输入流 cin 流对象 案例 get 函数 getline 函数 eof 函数 cout 流对象 cerr 流对象 clog 流对象 概述 C++ 的输入 (input stream) 和输出 (output stream)是由若干字节组成的字节序列, 使得数据按顺序从一个对象传送到另一对象. 流 (stream) 表示量信息从源到目的端的流动. C++ 的输入输出包括: 标准 I/O: 对系统指定的标准设备的输入 文件 I/O: 对磁盘文
-
C/C++中二进制文件&顺序读写详解及其作用介绍
目录 概述 二进制 vs ASCII 二进制写入 ASCII 写入 read 和 write 读写二进制文件 案例一 案例二 概述 二进制文件不同于文本文件, 它可以用于任何类型的文件 (包括文本文件). 二进制 vs ASCII 对于数值数据, ASCII 形式与二进制形式不同. ASCII 文件直观, 便于阅读, 但一般占存储空间较多, 而且需要花时间转换. 二进制文件是计算机的内部形式, 节省空间且不需要转换, 但不能直观显示. 对于字符信息, 在内存中是以 ASCII 代码形式存放, 无
-
C++中继承(inheritance)详解及其作用介绍
概述 面向对象程序设计中最重要的一个概念是继承 (inheritance). 继承允许我们依据另一个类来定义一个类, 这使得创建和维护一个应用程序变得更统一. 这样做也达到了重用代码功能和提高执行效率的效果. 类的概念 一个类中包含了若干数据成员和成员函数. 不同的类中的数据成员和成员函数各不相同. 但是有时两个类的内容基本相同. 例如: 继承的概念 继承 (inheritance) 就是在一个已存在的类的基础上建立一个新的类. 已存在的类: 基类 (base class) 或父类 (fathe
-
C++中static修饰符的详解及其作用介绍
目录 概述 静态数据成员 引用静态数据成员 用类名访问数据成员 静态成员函数 综合案例 概述 static (静态) 修饰符是用来控制变量的存储方式和可见性的. 静态局部变量存储在静态区域: static 的性质: 局部特性:作用范围仅限于本函数 静态特性:存储在静态区, 函数调用结束后不孝顺而保留原值. 在下一次调用时, 保留上一次调用结束时的值. 静态数据成员 在我们定义全局变量的时候, 我们会发现一个问题: 我们可以在程序各处自由的修改全局变量的值 (不安全). 静态数据成员的特点: 静态
-
C++中对象与类的详解及其作用介绍
目录 什么是对象 面向过程 vs 面向对象 面向过程 面向对象 什么是类 类的格式 类的成员函数 函数访问权限 方法一 方法二 方法三 inline 成员函数 什么是对象 任何事物都是一个对象, 也就是传说中的万物皆为对象. 对象的组成: 数据: 描述对象的属性 函数: 描述对象的行为, 根据外界的信息进行相应操作的代码 具有相同的属性和行为的对象抽象为类 (class) 类是对象的抽象 对象则是类的特例 面向过程 vs 面向对象 面向过程 面向过程的设计: 围绕功能, 用一个函数实现一个功能
-
C/C++ 中memset() 函数详解及其作用介绍
memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在<string.h>头文件中,可以用它对一片内存空间逐字节进行初始化: 原型为 : void *memset(void *s, int v, size_t n); 这里s可以是数组名,也可以是指向某一内在空间的指针: v为要填充的值: n为要填充的字节数: 例子: struct data { char num[100]; char name[100]; int n; }; struct data a, b[10]; me
随机推荐
- 解决json日期格式问题的3种方法
- 详解SpringBoot中实现依赖注入功能
- FLEX 日期时间操作
- RegExp对象的方法和属性
- 架设自己的FTP服务器 Serv-U详细配置图文教程[推荐]
- Tomeat6.0 连接池数据库配置
- JavaScript实现iframe自动高度调整和不同主域名跨域
- DropDownList根据下拉项的Text文本序号排序
- PHP四种基本排序算法示例
- 用Simple Excel导出xls实现方法
- Python中apply函数的用法实例教程
- C#实现简单的3DES加密解密功能示例
- typedef_struct与struct之间的区别
- Android开发apk反编译和二次打包教程
- 详解Vue监听数据变化原理
- JS获取checkbox的个数简单实例
- JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
- jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
- java批量导入导出文件的实例分享(兼容xls,xlsx)
- 浅析java volatitle 多线程问题