c++虚函数和纯虚函数的区别
·
虚函数(Virtual Function)和纯虚函数(Pure Virtual Function)是面向对象编程中的概念,它们在 C++ 中的作用和用法有所不同,主要区别如下:
虚函数(Virtual Function):
-
定义: 虚函数是在基类中声明为虚函数的成员函数。它通过在函数声明前加上
virtual关键字来定义。 -
实现: 虚函数可以有默认的实现体,也可以没有。如果一个派生类不重写(override)虚函数,它将继承基类的实现。
-
派生类行为: 派生类可以选择性地重写虚函数,以修改或扩展基类的行为。
-
可实例化: 如果基类中的虚函数有默认实现,基类可以被实例化。如果所有虚函数都是纯虚函数,基类将变成抽象类,无法实例化。
#include <iostream>
class Base {
public:
virtual void virtualFunction() const {
std::cout << "Base::virtualFunction()" << std::endl;
}
virtual ~Base() {} // 虚析构函数
};
class Derived : public Base {
public:
void virtualFunction() const override {
std::cout << "Derived::virtualFunction()" << std::endl;
}
};
纯虚函数(Pure Virtual Function):
-
定义: 纯虚函数是在基类中声明但没有提供实现体的虚函数。它的声明以
= 0结尾。 -
没有实现: 纯虚函数没有默认的实现体,只有接口声明,派生类必须重写纯虚函数才能实例化。
-
派生类行为: 派生类必须重写纯虚函数才能被实例化。
-
抽象类: 如果基类中有纯虚函数,基类将变成抽象类,无法实例化。
#include <iostream>
class Base {
public:
virtual void pureVirtualFunction() const = 0; // 纯虚函数声明
virtual ~Base() {} // 虚析构函数
};
class Derived : public Base {
public:
void pureVirtualFunction() const override {
std::cout << "Derived::pureVirtualFunction()" << std::endl;
}
};
总结:
- 虚函数可以有默认实现,而纯虚函数没有默认实现。
- 派生类可以选择性地重写虚函数,而纯虚函数必须被重写。
- 如果一个类包含纯虚函数,它将成为抽象类,无法实例化。
更多推荐

所有评论(0)