简述空的虚函数与纯虚函数的区别
时间: 2024-12-18 07:15:27 浏览: 22
在C++中,虚函数(Virtual Function)是一种特殊的成员函数,当它被声明为虚函数后,可以在基类指针或引用上调用正确的子类版本。空虚函数和纯虚函数是虚函数的两种不同状态:
1. **空虚函数**(Virtual Function without Implementation): 如果基类中声明了一个虚函数,但没有提供具体的实现(即没有=0),那么这个函数就是空虚函数。当你通过基类指针对子类对象调用这个虚函数时,程序会调用子类中实际定义的函数,实现了动态绑定。但在基类中直接调用这样的空虚函数会执行空操作,因为没有默认的实现。
示例:
```cpp
class Base {
public:
virtual void foo() = 0; // 空虚函数
};
```
2. **纯虚函数**(Pure Virtual Function): 纯虚函数是在基类中声明但没有提供实现,同时在其声明前加上`= 0`标识符的虚函数。纯虚函数强制子类必须覆盖它,不能在基类中直接实例化。纯虚函数的存在使得基类成为抽象类,而子类将成为具体的实现类。
示例:
```cpp
class Derived : public Base {
public:
virtual void foo(); // 子类必须实现foo()
};
// Base类是抽象类,不能实例化
Base* base = new Derived();
```
相关问题
简述什么是纯虚函数?它有何作用
纯虚函数是在基类中声明的虚函数,但是没有实现的函数,即在函数声明后加上“=0”表示该函数是纯虚函数。纯虚函数没有函数体,不能被直接调用,只能在派生类中进行实现。如果派生类没有实现纯虚函数,那么该派生类也是一个抽象类,不能被实例化。
纯虚函数的作用是为了实现抽象类和接口类。抽象类是一种不能被实例化的类,它只能被用作其他类的基类,其中包含纯虚函数。接口类是一种只包含纯虚函数和静态常量数据成员的类,用于定义一个接口。这种类中没有数据成员和函数实现,只有定义,派生类必须实现这些函数才能被实例化。通过纯虚函数,可以定义一个接口,规范派生类的行为,实现多态性。
多态有哪几种?请简述
多态主要体现在两种形式:静态多态(编译时多态)和动态多态(运行时多态)。
1. **静态多态(编译时多态)**:也称为早绑定或早期绑定,是通过函数重载(Overloading)和运算符重载实现的。在编译阶段,编译器根据函数调用的参数类型或操作数确定调用哪个函数版本。
2. **动态多态(运行时多态)**:又称为晚期绑定或晚期绑定,主要通过虚函数(Virtual Functions)来实现。在程序运行时,根据对象的实际类型决定调用哪个基类的虚函数,即使对象是某个派生类的实例。这包括:
- **虚函数(Virtual Function)**:在基类中声明为虚的成员函数,子类中的同名函数会继承并覆盖基类的行为。
- **纯虚函数(Pure Virtual Function)**:基类声明的没有实现的方法,强制要求派生类提供实现,这样基类成为抽象类。
- **虚析构函数(Virtual Destructor)**:与虚函数类似,用于确保正确地销毁动态分配的派生类对象,避免内存泄漏。
阅读全文