C++的虚函数和纯虚函数的功能是什么

C++中的虚函数(virtual function)和纯虚函数(pure virtual function)是面向对象编程中多态性的重要实现机制。它们允许通过基类指针或引用来调用派生类中的函数,而不是基类中的函数。

虚函数(Virtual Function)

虚函数是在基类中声明的,并在一个或多个派生类中被重写的函数。当我们通过基类指针或引用来调用虚函数时,实际调用的是指针或引用所指向对象的派生类中的版本(如果存在的话)。如果指针或引用指向的是基类对象,那么就会调用基类中的版本。这就是动态绑定或运行时多态性。

虚函数的主要目的是允许派生类改变或扩展基类的行为。

例如:

class Base {
   
public:
    virtual void func() {
   
        std::cout << "Base function\n";
    }
};

class Derived : public Base {
   
public:
    void func() override {
   
        std::cout << "Derived function\n";
    }
};

int main() {
   
    Base* ptr = new Derived();
    ptr->func();  // 输出 "Derived function"
    delete ptr;
    return 0;
}

纯虚函数(Pure Virtual Function)

纯虚函数是一种特殊的虚函数,它在基类中没有实现(即没有函数体)。纯虚函数在声明时必须以= 0结尾。包含纯虚函数的类是抽象类,不能创建其实例。派生类必须提供纯虚函数的实现,除非派生类本身也是抽象类。

纯虚函数的主要目的是强制派生类提供特定的实现。

例如:

class AbstractBase {
   
public:
    virtual void pureVirtualFunc() = 0;  // 纯虚函数
};

class Derived : public AbstractBase {
   
public:
    void pureVirtualFunc() override {
   
        std::cout << "Derived implementation\n";
    }
};

int main() {
   
    // AbstractBase* ptr = new AbstractBase();  // 错误:不能创建抽象类的实例
    AbstractBase* ptr = new Derived();
    ptr->pureVirtualFunc();  // 输出 "Derived implementation"
    delete ptr;
    return 0;
}

纯虚函数常常用于接口定义,即***定义一个类应该具有哪些函数,但不提供具体的实现***。实现将由派生类提供。

相关推荐

  1. C++函数函数功能什么

    2024-02-19 09:36:01       54 阅读
  2. c++ 函数

    2024-02-19 09:36:01       38 阅读
  3. 函数抽象类(C++)

    2024-02-19 09:36:01       62 阅读
  4. c++“二函数析构

    2024-02-19 09:36:01       31 阅读
  5. C++函数使用

    2024-02-19 09:36:01       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-19 09:36:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-19 09:36:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-19 09:36:01       87 阅读
  4. Python语言-面向对象

    2024-02-19 09:36:01       96 阅读

热门阅读

  1. docker修改工作目录

    2024-02-19 09:36:01       56 阅读
  2. MVCC简记

    2024-02-19 09:36:01       58 阅读
  3. 【nginx实践连载-4】彻底卸载Nginx(Ubuntu)

    2024-02-19 09:36:01       54 阅读
  4. Python内置函数05——filter

    2024-02-19 09:36:01       46 阅读
  5. pytorch导出为onnx,使用onnxruntime进行推理

    2024-02-19 09:36:01       41 阅读
  6. UDP协议

    UDP协议

    2024-02-19 09:36:01      51 阅读
  7. [Optimization] Codes Answer to online quiz 1

    2024-02-19 09:36:01       50 阅读
  8. harbor v1.7.1镜像仓库无法访问,并提示502 Bad Gateway

    2024-02-19 09:36:01       48 阅读
  9. Nginx错误502 Bad Gateway

    2024-02-19 09:36:01       53 阅读
  10. AutoSAR(基础入门篇)7.3-使用DEV配置SWC&RTE

    2024-02-19 09:36:01       52 阅读
  11. Rust-所有权(ownership)

    2024-02-19 09:36:01       53 阅读