# 类的定义

URL: https://caijiao.org/cpp/oop/classes
Source: docs/cpp/oop/classes.md
Description: 本节介绍 C++ 中类的定义与使用，讲解类的构造函数、成员变量与成员函数的定义及其作用，帮助理解面向对象编程的基本概念。

类是 C++ 中面向对象编程（OOP）的一部分，它允许我们将数据和函数封装在一个单一的结构中。类不仅是创建对象的模板，还可以帮助我们通过成员函数对数据进行操作。理解类的定义及其构成是学习面向对象编程的基础。

## 类的定义

在 C++ 中，类是通过 `class` 关键字定义的。一个类包含成员变量（属性）和成员函数（方法）。通过类，可以创建多个对象，每个对象都有自己的成员变量，并可以调用类中定义的成员函数。

### 示例：定义一个简单的类

```cpp
#include <iostream>
using namespace std;

class Person {
public:
    // 成员变量
    string name;
    int age;

    // 成员函数
    void introduce() {
        cout << "Hello, my name is " << name << " and I am " << age << " years old." << endl;
    }
};

int main() {
    // 创建类的对象
    Person person1;

    // 设置成员变量
    person1.name = "Alice";
    person1.age = 25;

    // 调用成员函数
    person1.introduce();

    return 0;
}
````

### 输出：

```
Hello, my name is Alice and I am 25 years old.
```

在此示例中，`Person` 类包含两个成员变量（`name` 和 `age`）以及一个成员函数（`introduce`）。在 `main` 函数中，创建了 `Person` 类的对象 `person1`，并通过该对象访问类的成员。

## 类的构造函数

构造函数是一个特殊的成员函数，在对象创建时自动调用，用于初始化对象的成员变量。如果没有定义构造函数，C++ 编译器会为类生成一个默认构造函数。

### 示例：定义构造函数

```cpp
#include <iostream>
using namespace std;

class Person {
public:
    string name;
    int age;

    // 构造函数
    Person(string n, int a) {
        name = n;
        age = a;
    }

    void introduce() {
        cout << "Hello, my name is " << name << " and I am " << age << " years old." << endl;
    }
};

int main() {
    // 创建对象时调用构造函数
    Person person1("Alice", 25);
    person1.introduce();

    Person person2("Bob", 30);
    person2.introduce();

    return 0;
}
```

### 输出：

```
Hello, my name is Alice and I am 25 years old.
Hello, my name is Bob and I am 30 years old.
```

在此示例中，`Person` 类定义了一个带有参数的构造函数，用于初始化 `name` 和 `age`。在 `main` 函数中创建对象时，构造函数被自动调用。

## 类的访问控制

C++ 类的成员可以使用访问控制符来限制外部访问。常见的访问控制符有：

* `public`：表示成员可以被外部访问。
* `private`：表示成员只能在类的内部访问，外部不能访问。
* `protected`：表示成员只能在类的内部和派生类中访问。

### 示例：使用访问控制符

```cpp
#include <iostream>
using namespace std;

class Person {
private:
    string name;  // 私有成员，不能直接访问
    int age;      // 私有成员，不能直接访问

public:
    // 公有成员函数
    void setName(string n) {
        name = n;
    }

    void setAge(int a) {
        age = a;
    }

    void introduce() {
        cout << "Hello, my name is " << name << " and I am " << age << " years old." << endl;
    }
};

int main() {
    Person person1;

    // 通过公有成员函数访问私有成员
    person1.setName("Alice");
    person1.setAge(25);

    person1.introduce();

    return 0;
}
```

### 输出：

```
Hello, my name is Alice and I am 25 years old.
```

在这个例子中，`name` 和 `age` 是 `private` 成员，外部无法直接访问这些成员。我们通过 `setName` 和 `setAge` 公有函数来设置这些私有成员的值。

## 小结

* 类是 C++ 中面向对象编程的核心，定义类时需要使用 `class` 关键字。
* 类包含成员变量和成员函数，可以通过类创建多个对象，每个对象都有自己的成员数据。
* 构造函数用于对象的初始化，可以通过构造函数传递参数。
* 类的成员可以通过访问控制符（`public`、`private`、`protected`）来设置访问权限。

理解类的定义及其构成是学习 C++ 面向对象编程的基础，这些知识对后续深入学习更复杂的 C++ 特性至关重要。
