主页
  • 主页
  • 分类
  • 热文
  • 教程
  • 面试
  • 标签
C++

C++ 基础

C++ 主页
C++ 概述
C++ 环境
C++ 基本语法
C++ 注释
C++ 数据类型
C++ Hello, World
C++ 省略命名空间
C++ 数值类型
C++ 字符类型
C++ 布尔类型
C++ 变量
C++ 作用域
C++ 多个变量
C++ 输入输出基础
C++ 常量/文字
C++ 修饰符类型
C++ 存储类别
C++ 操作符
C++ 决策结构
C++ 循环结构
C++ foreach 循环
C++ 数字
C++ 数组
C++ 指针
C++ 枚举类型
C++ 引用变量
C++ 日期与时间
C++ 结构体
C++ 联合类型

C++ 字符串

C++ 字符串
C++ 字符串长度
C++ 字符串连接

C++ 函数

C++ 函数
C++ 多参数函数
C++ 递归
C++ return 语句
C++ 函数重载
C++ 函数重写

C++ 面向对象

C++ 面向对象
C++ 类和对象
C++ 多重继承
C++ 多层次继承
C++ 继承
C++ 重载
C++ 多态性
C++ 抽象
C++ 封装
C++ 接口

C++ 高级

C++ 文件和流
C++ 异常处理
C++ 动态内存
C++ 命名空间
C++ 模板
C++ 预处理器
C++ 信号量
C++ 多线程
C++ Web 编程
C++ 高级概念

基础

C++ 主页
C++ 概述
C++ 环境
C++ 基本语法
C++ 注释
C++ 数据类型
C++ Hello, World
C++ 省略命名空间
C++ 数值类型
C++ 字符类型
C++ 布尔类型
C++ 变量
C++ 作用域
C++ 多个变量
C++ 输入输出基础
C++ 常量/文字
C++ 修饰符类型
C++ 存储类别
C++ 操作符
C++ 决策结构
C++ 循环结构
C++ foreach 循环
C++ 数字
C++ 数组
C++ 指针
C++ 枚举类型
C++ 引用变量
C++ 日期与时间
C++ 结构体
C++ 联合类型

字符串

C++ 字符串
C++ 字符串长度
C++ 字符串连接

函数

C++ 函数
C++ 多参数函数
C++ 递归
C++ return 语句
C++ 函数重载
C++ 函数重写

面向对象

C++ 面向对象
C++ 类和对象
C++ 多重继承
C++ 多层次继承
C++ 继承
C++ 重载
C++ 多态性
C++ 抽象
C++ 封装
C++ 接口

高级

C++ 文件和流
C++ 异常处理
C++ 动态内存
C++ 命名空间
C++ 模板
C++ 预处理器
C++ 信号量
C++ 多线程
C++ Web 编程
C++ 高级概念

C++ 封装


上一章 下一章

所有的 C++ 程序都由以下两个基本要素组成:

  • 程序语句(代码) — 这是程序执行动作的部分,它们被称为函数。
  • 程序数据 — 数据是程序的信息部分,受到程序函数的影响。

封装是面向对象编程的一个概念,它将数据与其用于操纵数据的函数捆绑在一起,并保持两者不受外界干扰和滥用。数据封装导致了重要的面向对象编程概念—数据隐藏。

数据封装是一种捆绑数据及其使用函数的机制,而数据抽象则是只暴露接口并隐藏实现细节的机制。

C++ 通过创建用户定义的类型,即类,来支持封装和数据隐藏的属性。我们已经了解到,一个类可以包含私有、受保护和公共成员。默认情况下,类中定义的所有项都是私有的。例如:

class Box {
   public:
      double getVolume(void) {
         return length * breadth * height;
      }

   private:
      double length;      // 长方体的长度
      double breadth;     // 长方体的宽度
      double height;      // 长方体的高度
};

变量 length、breadth 和 height 是私有的。这意味着它们只能被 Box 类的其他成员访问,而不能被程序的其他部分访问。这是实现封装的一种方式。

为了让类的一部分公开(即,可被程序的其他部分访问),你必须在 public 关键字之后声明它们。所有在 public 限定符之后定义的变量或函数都可以被程序中的所有其他函数访问。

让一个类成为另一个类的朋友会暴露其实现细节并减少封装。理想情况是尽可能多地隐藏每个类的细节不让其他类知道。

数据封装示例

任何一个你实现了具有公共和私有成员的类的 C++ 程序都是数据封装和数据抽象的例子。请看下面的例子:

#include <iostream>
using namespace std;

class Adder {
   public:
      // 构造函数
      Adder(int i = 0) {
         total = i;
      }
      
      // 对外世界的接口
      void addNum(int number) {
         total += number;
      }
      
      // 对外世界的接口
      int getTotal() {
         return total;
      };
   
   private:
      // 对外世界隐藏的数据
      int total;
};

int main() {
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);

   cout << "Total " << a.getTotal() <<endl;
   return 0;
}

当上述代码被编译和执行时,它会产生以下结果:

Total 60

上述类将数字相加,并返回总和。公共成员 addNum 和 getTotal 是对外世界的接口,用户需要知道它们才能使用这个类。私有成员 total 是对外界隐藏的,但它对于类的正常运作是必要的。

设计策略

我们大多数人已经学会了默认将类成员设为私有的,除非我们确实需要暴露它们。这只是良好的封装实践。

这最常应用于数据成员,但它同样适用于所有成员,包括虚函数。

上一章 下一章
阅读号二维码

关注阅读号

联系二维码

联系我们

© 2024 Yoagoa. All rights reserved.

粤ICP备18007391号

站点地图