深蓝学院C++基础与深度解析笔记 第 12 章 类进阶
发布人:shili8
发布时间:2025-01-10 10:49
阅读次数:0
**深蓝学院 C++ 基础与深度解析笔记**
**第12 章: 类进阶**
在前面的章节中,我们已经学习了类的基本概念、构造函数、拷贝构造函数、赋值运算符等。然而,C++ 的类系统还提供了更多的功能和特性,让我们能够更好地组织代码并实现复杂的逻辑。
###12.1 类成员变量在前面的章节中,我们已经学习过类成员变量的基本概念。然而,在实际开发中,类成员变量往往需要被初始化或者赋值。在 C++ 中,我们可以使用构造函数来完成这一步骤。
cppclass Person { public: string name; int age; // 构造函数 Person(string n, int a) : name(n), age(a) {} };
在上面的例子中,我们定义了一个 `Person` 类,包含两个成员变量 `name` 和 `age`。我们使用构造函数来初始化这些成员变量。
###12.2 类成员函数类成员函数是类的一个重要组成部分,它们可以操作类的成员变量并完成特定的逻辑。在 C++ 中,我们可以使用关键字 `void` 来定义一个没有返回值的函数,或者使用类型来定义一个有返回值的函数。
cppclass Person { public: string name; int age; // 构造函数 Person(string n, int a) : name(n), age(a) {} // 成员函数 void sayHello() { cout << "Hello, my name is " << name << " and I'm " << age << " years old." << endl; } };
在上面的例子中,我们定义了一个 `sayHello` 函数,它可以输出类成员变量的值。
###12.3 类静态成员类静态成员是类的一个重要组成部分,它们可以被所有实例共享。在 C++ 中,我们使用关键字 `static` 来定义一个静态成员。
cppclass Person { public: static int count; // 构造函数 Person() { count++; } };
在上面的例子中,我们定义了一个 `count` 静态成员,它可以被所有实例共享。
###12.4 类友元函数类友元函数是类的一个重要组成部分,它们可以访问类的私有成员。在 C++ 中,我们使用关键字 `friend` 来定义一个友元函数。
cppclass Person { public: string name; int age; // 构造函数 Person(string n, int a) : name(n), age(a) {} // 友元函数 friend void printPerson(Person p); }; void printPerson(Person p) { cout << "Name: " << p.name << endl; cout << "Age: " << p.age << endl; }
在上面的例子中,我们定义了一个 `printPerson` 友元函数,它可以访问类的私有成员。
###12.5 类模板类模板是 C++ 中的一个重要特性,它们可以让我们定义一个通用的类,能够适应不同的类型。在 C++ 中,我们使用关键字 `template` 来定义一个类模板。
cpptemplate <typename T> class Container { public: T data; // 构造函数 Container(T d) : data(d) {} };
在上面的例子中,我们定义了一个 `Container` 类模板,它可以容纳任何类型的数据。
###12.6 类继承类继承是 C++ 中的一个重要特性,它们可以让我们定义一个新的类,继承另一个类的成员和行为。在 C++ 中,我们使用关键字 `class` 或 `struct` 来定义一个类,并使用冒号来指定继承关系。
cppclass Animal { public: string name; // 构造函数 Animal(string n) : name(n) {} }; class Dog : public Animal { public: int age; // 构造函数 Dog(string n, int a) : Animal(n), age(a) {} };
在上面的例子中,我们定义了一个 `Animal` 类,并继承它的成员和行为。我们还定义了一个 `Dog` 类,继承了 `Animal` 类的成员和行为。
###12.7 类多态类多态是 C++ 中的一个重要特性,它们可以让我们定义一个函数,能够适应不同的类型。在 C++ 中,我们使用虚函数来实现类多态。
cppclass Animal { public: virtual void sound() =0; }; class Dog : public Animal { public: void sound() override { cout << "Woof!" << endl; } };
在上面的例子中,我们定义了一个 `Animal` 类,并使用虚函数来实现类多态。我们还定义了一个 `Dog` 类,继承了 `Animal` 类的成员和行为。
###12.8 类抽象类抽象是 C++ 中的一个重要特性,它们可以让我们定义一个接口或抽象类。在 C++ 中,我们使用关键字 `abstract` 或 `interface` 来定义一个抽象类。
cppclass Animal { public: virtual void sound() =0; }; class Dog : public Animal { public: void sound() override { cout << "Woof!" << endl; } };
在上面的例子中,我们定义了一个 `Animal` 类,并使用虚函数来实现类抽象。我们还定义了一个 `Dog` 类,继承了 `Animal` 类的成员和行为。
###12.9 总结本章我们学习了 C++ 中类的进阶特性,包括类成员变量、类成员函数、类静态成员、类友元函数、类模板、类继承、类多态和类抽象。这些特性可以让我们定义一个更复杂和更灵活的类系统。
###12.10 练习1. 定义一个 `Person` 类,包含两个成员变量 `name` 和 `age`。
2. 使用构造函数来初始化 `name` 和 `age` 成员变量。
3. 定义一个 `sayHello` 函数,它可以输出类成员变量的值。
4. 使用关键字 `static` 来定义一个静态成员 `count`。
5. 使用关键字 `friend` 来定义一个友元函数 `printPerson`。
6. 使用关键字 `template` 来定义一个类模板 `Container`。
7. 使用关键字 `class` 或 `struct` 来定义一个类继承关系。
8. 使用虚函数来实现类多态和类抽象。
###12.11 参考资料* C++ Primer Plus (6th Edition) by Lippman* The C++ Programming Language (4th Edition) by Stroustrup* Effective C++ (3rd Edition) by Meyers