在 C++ 中,虚函数和纯虚函数都与面向对象编程中的多态性相关,但它们有一些关键的区别。
虚函数(Virtual Function):
-
定义:虚函数是在基类中声明并在派生类中定义的函数,使用
virtual
关键字进行声明。在基类中可以提供一个默认实现,但在派生类中可以选择覆盖(override)它。 -
实现:虚函数可以在基类中包含实现,但这个实现可以被派生类覆盖。如果派生类没有提供自己的实现,将使用基类的默认实现。
-
派生类的选择:派生类可以选择性地覆盖虚函数。如果不覆盖,将使用基类的实现。
-
示例:
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):
-
定义:纯虚函数是在基类中声明但没有提供实现的虚函数,使用
virtual
关键字和= 0
进行声明。纯虚函数必须在派生类中被实现。 -
实现:纯虚函数在基类中没有提供实现,它是抽象的,必须由派生类提供实际的实现。
-
派生类的强制实现:派生类必须提供纯虚函数的实现,否则该派生类也会成为抽象类。
-
示例:
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; } };
总结区别:
- 实现有无:虚函数可以在基类中提供实现,而纯虚函数在基类中没有提供实现。
- 是否强制实现:纯虚函数要求派生类必须提供实现,否则它也会成为抽象类,而虚函数允许派生类选择是否覆盖。
- 实例化对象:纯虚函数的类不能实例化对象,而虚函数的类可以实例化对象。
在实际应用中,虚函数和纯虚函数的选择取决于设计的目标。使用虚函数时,可以提供基类的默认实现,而纯虚函数则用于强制派生类提供特定的实现。
标签:函数,实现,提供,派生类,C++,纯虚,基类 From: https://www.cnblogs.com/keye/p/17910415.html