1 前言

C++作为典型的面向对象编程语言,其核心思想在于:万物皆对象。对象包含其属性(数据)与行为(函数),而具有相同特征的一组对象可以抽象为类(Class)。

在面向对象思想中,C++提供了三大基本特性:

  • 封装(Encapsulation)

  • 继承(Inheritance)

  • 多态(Polymorphism)

封装是三大特性中最基础的部分,它为类提供属性与行为的组织结构,并通过访问权限控制数据安全性。

2 封装

2.1 封装的基本含义

封装指将数据(属性)和操作这些数据的函数(行为)组织为一个整体,并通过访问控制实现数据安全与模块化管理。

2.1.1 封装的意义

  1. 表达现实世界事物

    数据与行为统一存放在类中,使抽象更贴近真实物体。

  2. 权限控制,保护数据

    通过访问权限限制外部对内部数据的直接访问,防止误用或非法操作。

2.2 基本语法格式

class 类名 {
public:
    // 公共行为 / 属性
protected:
    // 受保护的成员
private:
    // 私有成员
};

2.3 设计一个圆类,计算圆的周长

#include <iostream>
using namespace std;

const double PI = 3.14;

class Circle {
public:
    int m_r;  // 半径

    double calculatePerimeter() {
        return 2 * PI * m_r;
    }
};

int main() {
    Circle c1;
    c1.m_r = 10;
    cout << "圆的周长为: " << c1.calculatePerimeter() << endl;
    return 0;
}

说明:将半径和求周长的行为封装在同一个类中,表现事物本身与其功能的统一性。

2.4 学生类的封装

class Student {
public:
    void setName(const string& name) { m_name = name; }
    void setID(int id) { m_id = id; }

    void show() const {
        cout << "Name: " << m_name << ", ID: " << m_id << endl;
    }

private:
    string m_name;
    int m_id;
};

int main() {
    Student stu;
    stu.setName("Tom");
    stu.setID(2024);
    stu.show();
    return 0;
}

说明:属性设为私有,通过公共接口进行访问 → 数据可控,修改安全。

3 访问权限与控制

3.1 三种权限说明

权限关键字

类内访问

类外访问

继承中可访问

典型用途

public

对外提供接口

protected

继承扩展时使用

private

严格保护内部数据

示例:

class Person {
public:
    string m_Name;  // 公共属性

protected:
    string m_Car;   // 保护属性

private:
    int m_Password; // 私有属性
};

4 struct 与 class 的区别

在 C++ 中,唯一的语法区别在默认访问权限:

关键字

默认成员访问权限

class

private

struct

public

class A { int m_a; };
struct B { int m_a; };

int main() {
    A a;
    // a.m_a = 10; // 错误:private

    B b;
    b.m_a = 10; // 正确:public
}

5 成员属性设为私有的优点

  1. 读取/写入行为可控

    可以只读、只写或可读可写。

  2. 可在写入时检查有效性

    防止无效或危险数据。

示例:

class Person {
public:
    void setName(const string& name) { m_Name = name; }
    string getName() const { return m_Name; }

    void setAge(int age) {
        if(age < 0 || age > 150) {
            cout << "非法年龄!" << endl;
            return;
        }
        m_Age = age;
    }
    int getAge() const { return m_Age; }

    void setLover(const string& lover) { m_Lover = lover; } // 只写

private:
    string m_Name;  
    int m_Age;      
    string m_Lover;
};

6 技术术语解释

术语

含义说明

类(Class)

具有共同行为与属性的抽象模板

对象(Object)

类的具体实例,可实际参与操作

属性(Member Variable)

对象的数据特征

行为(Member Function)

描述对象能执行的操作

访问权限

限制外部或继承对成员访问的方式

7 总结

封装作为面向对象最基础的特性,核心在于:

  • 将属性与行为组织为一个整体,贴合现实世界抽象;

  • 通过访问控制保护内部数据,提升程序安全性和可维护性;

  • 为后续的继承和多态特性打下结构基础。

掌握封装,不仅能写出更健壮、可扩展、结构清晰的代码,也能更好地理解面向对象程序设计的核心思想。