C++ 类与对象的深入分析(四)
C++ 类与对象是对面向对象编程的核心概念。在之前的内容中,我们已经讨论了类的基本定义、对象的创建、构造函数和析构函数的作用以及类的继承。在深入分析第四部分中,我们将继续探讨 C++ 类与对象的高级概念,具体包括多态性、接口(抽象类和纯虚函数)和模板类。
1. 多态性(Polymorphism)
多态性允许一个接口有多个实现,是面向对象编程的一个重要特性。C++ 实现多态主要通过虚函数。
虚函数(Virtual Function)
- 定义:在基类中使用
virtual
关键字声明的函数。 - 动态绑定:通过指针或引用调用虚函数,程序会在运行时确定调用哪一个函数实现,即动态绑定。
- 用途:允许子类重写基类的函数行为,从而实现多态性。
class Base {
public:
virtual void show() {
std::cout << "Base show" << std::endl;
}
};
class Derived : public Base {
public:
void show() override {
std::cout << "Derived show" << std::endl;
}
};
void demonstratePolymorphism() {
Base* b = new Derived();
b->show(); // 输出: Derived show
delete b;
}
2. 抽象类与纯虚函数
抽象类用于定义接口,它不能被实例化,通常包含至少一个纯虚函数。
纯虚函数(Pure Virtual Function)
- 定义:声明时在函数名后面加
= 0
。 - 作用:要求派生类必须实现该函数,否则派生类也将是抽象类。
class AbstractBase {
public:
virtual void pureVirtualFunction() = 0; // 纯虚函数
};
class ConcreteDerived : public AbstractBase {
public:
void pureVirtualFunction() override {
std::cout << "Implemented pure virtual function" << std::endl;
}
};
void useAbstractClass() {
ConcreteDerived obj;
obj.pureVirtualFunction();
}
3. 模板类(Template Classes)
模板类允许将类型作为参数进行传递,以实现泛型编程。
定义模板类
- 语法:使用
template<typename T>
或template<class T>
。 - 用途:在定义通用数据结构时(如链表、栈等),避免对不同数据类型重复编写代码。
template<typename T>
class MyVector {
private:
T* arr;
int size;
public:
MyVector(int s) : size(s) {
arr = new T[s];
}
T& operator[](int index) {
return arr[index];
}
~MyVector() {
delete[] arr;
}
};
void demonstrateTemplateClass() {
MyVector<int> intVector(10);
MyVector<double> doubleVector(20);
intVector[0] = 5;
doubleVector[0] = 5.5;
std::cout << intVector[0] << " " << doubleVector[0] << std::endl;
}
以上是 C++ 类与对象的深入探讨。在编写复杂项目时,理解和应用这些高级特性可以使代码更具扩展性和可维护性。多态性确保了代码的灵活性,而抽象类和模板类提供了很好的通用框架和重用性。通过掌握这些特性,开发者可以设计出更优雅、更高效的应用程序。