文章

C++ 数据封装

C++ 数据封装

数据封装(Encapsulation) 是 面向对象编程(OOP) 的三大特性之一。它的核心思想是 把数据和操作数据的函数绑定在一起,并通过访问权限来保护数据。

也就是说,对象的内部状态对外部隐藏,只能通过类提供的接口访问。

实现方式

数据封装主要依赖访问控制符

  • public: 对所有代码可见
  • protected: 对子类和本类可见
  • private: 仅对本类可见

封装示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
using namespace std;

class Student {
private:
    string name;   // 私有数据,外部无法直接访问
    int age;

public:
    // 构造函数
    Student(string n, int a) : name(n), age(a) {}

    // 公有接口:修改和访问数据
    void setAge(int a) {
        if (a > 0 && a < 150) {
            age = a;
        } else {
            cout << "非法年龄!" << endl;
        }
    }

    int getAge() const {
        return age;
    }

    string getName() const {
        return name;
    }
};

int main() {
    Student s("Alice", 20);

    cout << s.getName() << " 的年龄是 " << s.getAge() << endl;

    s.setAge(25);   // ✅ 正确
    cout << "更新后的年龄: " << s.getAge() << endl;

    // s.age = -100; ❌ 错误,age 是 private
}

数据封装和数据抽象对比

特性数据封装数据抽象
关注点隐藏数据(内部状态保护)隐藏实现(只暴露接口)
实现方式private/protected/public抽象类、虚函数
目的防止外部随意修改数据让用户只关心功能而非实现
举例private int age; + getter/settervirtual void draw() = 0;

封装是手段(保护数据),抽象是目的(简化接口)

本文由作者按照 CC BY 4.0 进行授权