全部的 C++ 程序都有如下两个基本要素:ios
封装是面向对象编程中的把数据和操做数据的函数绑定在一块儿的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装引伸出了另外一个重要的 OOP 概念,即数据隐藏。编程
数据封装是一种把数据和操做数据的函数捆绑在一块儿的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。安全
C++ 经过建立类来支持封装和数据隐藏(public、protected、private)。咱们已经知道,类包含私有成员(private)、保护成员(protected)和公有成员(public)成员。默认状况下,在类中定义的全部项目都是私有的。例如:网络
class Box { public: double getVolume(void) { return length * breadth * height; } private: double length; // 长度 double breadth; // 宽度 double height; // 高度 };
变量 length、breadth 和 height 都是私有的(private)。这意味着它们只能被 Box 类中的其余成员访问,而不能被程序中其余部分访问。这是实现封装的一种方式。函数
为了使类中的成员变成公有的(即,程序中的其余部分也能访问),必须在这些成员前使用 public 关键字进行声明。全部定义在 public 标识符后边的变量或函数能够被程序中全部其余的函数访问。spa
把一个类定义为另外一个类的友元类,会暴露实现细节,从而下降了封装性。理想的作法是尽量地对外隐藏每一个类的实现细节。设计
C++ 程序中,任何带有公有和私有成员的类均可以做为数据封装和数据抽象的实例。请看下面的实例:code
#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; }
当上面的代码被编译和执行时,它会产生下列结果:对象
Total60
上面的类把数字相加,并返回总和。公有成员 addNum 和 getTotal 是对外的接口,用户须要知道它们以便使用类。私有成员 total 是对外隐藏的,用户不须要了解它,但它又是类能正常工做所必需的。接口
一般状况下,咱们都会设置类成员状态为私有(private),除非咱们真的须要将其暴露,这样才能保证良好的封装性。
这一般应用于数据成员,但它一样适用于全部成员,包括虚函数。
若是你对C/C++感兴趣,想学编程,小编推荐一个C/C++技术交流群【点击进入】!
涉及到了:编程入门、游戏编程、网络编程、Windows编程、Linux编程、Qt界面开发、黑客等等......