C++(虚函数和纯虚函数的区别)

在 C++ 中,虚函数和纯虚函数都与面向对象编程中的多态性相关,但它们有一些关键的区别。

虚函数(Virtual Function):

  1. 定义:虚函数是在基类中声明并在派生类中定义的函数,使用 virtual 关键字进行声明。在基类中可以提供一个默认实现,但在派生类中可以选择覆盖(override)它。

  2. 实现:虚函数可以在基类中包含实现,但这个实现可以被派生类覆盖。如果派生类没有提供自己的实现,将使用基类的默认实现。

  3. 派生类的选择:派生类可以选择性地覆盖虚函数。如果不覆盖,将使用基类的实现。

  4. 示例

    class Base {
    public:
        virtual void print() {
            std::cout << "Base class print function" << std::endl;
        }
    };
    
    class Derived : public Base {
    public:
        void print() override {
            std::cout << "Derived class print function" << std::endl;
        }
    };
    

纯虚函数(Pure Virtual Function):

  1. 定义:纯虚函数是在基类中声明但没有提供实现的虚函数,使用 virtual 关键字和 = 0 进行声明。纯虚函数必须在派生类中被实现。

  2. 实现:纯虚函数在基类中没有提供实现,它是抽象的,必须由派生类提供实际的实现。

  3. 派生类的强制实现:派生类必须提供纯虚函数的实现,否则该派生类也会成为抽象类。

  4. 示例

    class AbstractBase {
    public:
        virtual void pureVirtualFunction() = 0;
    };
    
    class ConcreteDerived : public AbstractBase {
    public:
        void pureVirtualFunction() override {
            std::cout << "ConcreteDerived class implements pure virtual function" << std::endl;
        }
    };
    

总结区别:

  • 实现有无:虚函数可以在基类中提供实现,而纯虚函数在基类中没有提供实现。
  • 是否强制实现:纯虚函数要求派生类必须提供实现,否则它也会成为抽象类,而虚函数允许派生类选择是否覆盖。
  • 实例化对象:纯虚函数的类不能实例化对象,而虚函数的类可以实例化对象。

在实际应用中,虚函数和纯虚函数的选择取决于设计的目标。使用虚函数时,可以提供基类的默认实现,而纯虚函数则用于强制派生类提供特定的实现。



posted @   做梦当财神  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示