在C++中,类(Class) 是一种用户定义的数据类型,它将数据和操作这些数据的函数封装在一起,实现了面向对象编程的核心思想:封装、继承、多态

1. 类的基本定义

类是对对象的一种抽象描述。它定义了对象的属性(成员变量)和行为(成员函数),是一种数据和函数的集合。

语法:

class ClassName {
private:   // 私有成员,默认访问权限
    // 数据成员(属性)

public:    // 公有成员
    // 构造函数
    // 成员函数(方法)
};

示例:

#include <iostream>
using namespace std;

class Person {
private:
    string name; // 私有成员变量
    int age;

public:
    // 构造函数:初始化对象
    Person(string n, int a) : name(n), age(a) {}

    // 成员函数:操作类的属性
    void display() {
        cout << "Name: " << name << ", Age: " << age << endl;
    }
};

int main() {
    // 创建对象
    Person p1("Alice", 25);
    p1.display(); // 输出:Name: Alice, Age: 25
    return 0;
}

2. 类的组成

(1)成员变量

成员变量是类中的属性,用于存储对象的状态。

  • 访问权限:成员变量可以是 private(私有)、protected(受保护)或 public(公有)。
  • 默认访问权限:如果未指定,默认是 private

(2)成员函数

成员函数是类中的行为,用于操作成员变量或提供功能。

  • 函数定义可以在类内部(隐式内联)或类外部。

示例:

class Example {
private:
    int value;

public:
    void setValue(int v) { // 定义在类内
        value = v;
    }
    int getValue();        // 声明在类内,定义在类外
};

int Example::getValue() {  // 类外定义
    return value;
}

3. 构造函数和析构函数

(1)构造函数

  • 构造函数是一个与类同名的特殊函数,用于在创建对象时初始化成员变量。
  • 没有返回值。
  • 可以有参数(重载构造函数),也可以没有参数(默认构造函数)。
  • 支持初始化列表

示例:

class MyClass {
private:
    int x;
public:
    MyClass(int value) : x(value) { // 使用初始化列表
        cout << "Constructor called, x = " << x << endl;
    }
};

(2)析构函数

  • 析构函数是一个特殊的函数,用于在对象销毁时释放资源。
  • ~ 开头,类名后不带参数。
  • 系统会自动调用析构函数。

示例:

class MyClass {
public:
    ~MyClass() {
        cout << "Destructor called" << endl;
    }
};

4. 访问权限

C++中的访问权限用于控制成员变量和函数的可见性:

权限 类内访问 派生类访问 外部访问
private
protected
public

5. 类的头文件和源文件分离

在C++中,通常将类的声明和实现分离,以提高代码的可维护性和模块化。

  • 头文件(.h):存放类的声明和接口。
  • 源文件(.cpp):存放类的具体实现。

示例:

Person.h
#ifndef PERSON_H
#define PERSON_H

#include <string>
using namespace std;

class Person {
private:
    string name;
    int age;

public:
    Person(string n, int a);
    void display();
};

#endif
Person.cpp
#include "Person.h"
#include <iostream>
using namespace std;

// 构造函数的实现
Person::Person(string n, int a) : name(n), age(a) {}

// 成员函数的实现
void Person::display() {
    cout << "Name: " << name << ", Age: " << age << endl;
}
main.cpp
#include "Person.h"

int main() {
    Person p("Bob", 30);
    p.display();
    return 0;
}

6. 面向对象的特性

(1)封装

将数据和操作数据的函数封装在一个类中,通过访问权限保护数据。

  • 通过 private隐藏细节,通过 public暴露接口。

(2)继承

一个类可以从另一个类中继承属性和方法,支持代码复用。

  • 基类(父类):被继承的类。
  • 派生类(子类):继承基类的类。

示例:

class Animal {
public:
    void eat() { cout << "I can eat." << endl; }
};

class Dog : public Animal { // Dog继承自Animal
public:
    void bark() { cout << "I can bark." << endl; }
};

(3)多态

允许通过基类指针或引用调用派生类的行为。

  • 实现方式:虚函数。

  • 示例:

    class Animal {
    public:
        virtual void sound() { cout << "Animal sound" << endl; }
    };
    
    class Dog : public Animal {
    public:
        void sound() override { cout << "Dog barks" << endl; }
    };
    
    int main() {
        Animal* a = new Dog();
        a->sound();  // 输出:Dog barks
        delete a;
        return 0;
    }
    

7. 类的特点总结

  • 封装:通过类组织数据和功能。
  • 继承:支持代码复用和扩展。
  • 多态:实现灵活的接口调用。
  • 分离声明与实现:通过头文件和源文件组织代码。

类是C++实现复杂系统的基础工具,通过类和对象,开发者可以用更自然的方式模拟现实世界的事物和行为。