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 @ 2023-12-18 10:01  做梦当财神  阅读(4)  评论(0编辑  收藏  举报