提示信息

C++ 类与对象的深入分析(四)

微扬嘴角 已关注

C++ 类与对象是对面向对象编程的核心概念。在之前的内容中,我们已经讨论了类的基本定义、对象的创建、构造函数和析构函数的作用以及类的继承。在深入分析第四部分中,我们将继续探讨 C++ 类与对象的高级概念,具体包括多态性、接口(抽象类和纯虚函数)和模板类。

1. 多态性(Polymorphism)

多态性允许一个接口有多个实现,是面向对象编程的一个重要特性。C++ 实现多态主要通过虚函数。

虚函数(Virtual Function)

  • 定义:在基类中使用 virtual 关键字声明的函数。
  • 动态绑定:通过指针或引用调用虚函数,程序会在运行时确定调用哪一个函数实现,即动态绑定。
  • 用途:允许子类重写基类的函数行为,从而实现多态性。
  1. class Base {
  2. public:
  3. virtual void show() {
  4. std::cout << "Base show" << std::endl;
  5. }
  6. };
  7. class Derived : public Base {
  8. public:
  9. void show() override {
  10. std::cout << "Derived show" << std::endl;
  11. }
  12. };
  13. void demonstratePolymorphism() {
  14. Base* b = new Derived();
  15. b->show(); // 输出: Derived show
  16. delete b;
  17. }

2. 抽象类与纯虚函数

抽象类用于定义接口,它不能被实例化,通常包含至少一个纯虚函数。

纯虚函数(Pure Virtual Function)

  • 定义:声明时在函数名后面加 = 0
  • 作用:要求派生类必须实现该函数,否则派生类也将是抽象类。
  1. class AbstractBase {
  2. public:
  3. virtual void pureVirtualFunction() = 0; // 纯虚函数
  4. };
  5. class ConcreteDerived : public AbstractBase {
  6. public:
  7. void pureVirtualFunction() override {
  8. std::cout << "Implemented pure virtual function" << std::endl;
  9. }
  10. };
  11. void useAbstractClass() {
  12. ConcreteDerived obj;
  13. obj.pureVirtualFunction();
  14. }

3. 模板类(Template Classes)

模板类允许将类型作为参数进行传递,以实现泛型编程。

定义模板类

  • 语法:使用 template<typename T>template<class T>
  • 用途:在定义通用数据结构时(如链表、栈等),避免对不同数据类型重复编写代码。
  1. template<typename T>
  2. class MyVector {
  3. private:
  4. T* arr;
  5. int size;
  6. public:
  7. MyVector(int s) : size(s) {
  8. arr = new T[s];
  9. }
  10. T& operator[](int index) {
  11. return arr[index];
  12. }
  13. ~MyVector() {
  14. delete[] arr;
  15. }
  16. };
  17. void demonstrateTemplateClass() {
  18. MyVector<int> intVector(10);
  19. MyVector<double> doubleVector(20);
  20. intVector[0] = 5;
  21. doubleVector[0] = 5.5;
  22. std::cout << intVector[0] << " " << doubleVector[0] << std::endl;
  23. }

以上是 C++ 类与对象的深入探讨。在编写复杂项目时,理解和应用这些高级特性可以使代码更具扩展性和可维护性。多态性确保了代码的灵活性,而抽象类和模板类提供了很好的通用框架和重用性。通过掌握这些特性,开发者可以设计出更优雅、更高效的应用程序。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
微扬嘴角 关注 已关注

最近一次登录:2024-11-19 23:15:06   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图