【c++中虚函数和纯虚函数的区别】在C++中,虚函数(virtual function)和纯虚函数(pure virtual function)是面向对象编程中的重要概念,它们都与多态性密切相关。虽然两者都涉及类的继承和动态绑定,但它们在功能和使用方式上存在明显区别。以下是对两者的总结对比。
一、基本定义
概念 | 定义 |
虚函数 | 在基类中用`virtual`关键字声明的函数,允许派生类重写该函数。 |
纯虚函数 | 在基类中声明为`virtual`且没有实现的函数,定义形式为`virtual void func() = 0;` |
二、主要区别
对比项 | 虚函数 | 纯虚函数 |
是否有实现 | 有默认实现(可以被覆盖) | 没有实现,仅声明 |
是否可以实例化 | 可以实例化(非抽象类) | 不可以实例化(必须为抽象类) |
是否需要覆盖 | 派生类可以选择是否覆盖 | 派生类必须覆盖(否则无法实例化) |
是否能被调用 | 可以直接调用(如果未被覆盖) | 不能直接调用(必须通过派生类对象调用) |
类型 | 属于普通类,可创建对象 | 属于抽象类,不能直接创建对象 |
使用场景 | 用于实现默认行为,同时支持多态 | 用于定义接口,强制子类实现特定功能 |
三、代码示例
```cpp
// 虚函数示例
class Base {
public:
virtual void show() {
cout << "Base class" << endl;
}
};
class Derived : public Base {
public:
void show() override {
cout << "Derived class" << endl;
}
};
// 纯虚函数示例
class AbstractBase {
public:
virtual void display() = 0; // 纯虚函数
};
class Concrete : public AbstractBase {
public:
void display() override {
cout << "Concrete class" << endl;
}
};
```
四、总结
虚函数和纯虚函数都是实现多态的重要手段,但它们的应用场景不同:
- 虚函数适用于需要提供默认实现,并允许子类选择是否重写的场景。
- 纯虚函数则用于定义接口,强制子类实现特定方法,常用于设计抽象类。
在实际开发中,合理使用这两种函数能够提高代码的灵活性和可扩展性。