在C++中,纯虚函数和抽象类是面向对象编程中的重要概念,用于实现多态性和接口定义
-
1.纯虚函数(Pure Virtual Function):
- 纯虚函数是在基类中声明的虚函数,但没有提供实现。它们以关键字声明,并在函数声明的末尾加上来指示它是一个纯虚函数。
virtual
= 0
- 纯虚函数的存在使得基类成为抽象类,无法实例化对象。
- 派生类必须提供纯虚函数的实现才能实例化对象。
- 纯虚函数用于定义接口,要求派生类提供特定的行为实现。
- 纯虚函数是在基类中声明的虚函数,但没有提供实现。它们以关键字声明,并在函数声明的末尾加上来指示它是一个纯虚函数。
class Base {
public:virtual void show() = 0; // 纯虚函数
};class Derived : public Base {
public:void show() override {cout << "Derived class implementation" << endl;}
};
2.抽象类(Abstract Class):
- 包含纯虚函数的类被称为抽象类。
- 抽象类不能被实例化,即不能创建抽象类的对象。但可以声明抽象类的指针和引用。
- 抽象类用于定义通用接口和行为,要求派生类提供具体的实现。
class Shape {
public:virtual void draw() = 0; // 纯虚函数
};class Circle : public Shape {
public:void draw() override {cout << "Drawing a circle" << endl;}
};class Rectangle : public Shape {
public:void draw() override {cout << "Drawing a rectangle" << endl;}
};
3.完整案例解析
#include <iostream>
using namespace std;
//纯虚函数和抽象类class Base {
public://纯虚函数//只要有一个纯虚函数,这个类称为抽象类//抽象类特点://1.抽象类不能实例化对象//2.抽象类的子类 必须要重写父类中的纯虚函数,否则也属于抽象类virtual void func() = 0;};class Son:public Base {
public:virtual void func() {cout << "Son::func()" << endl;}};void test01() {//Base b; // 报错,不能实例化抽象类//Son s;子类必须重写父类中的纯虚函数,否则无法实例化对象Base *p = new Son; // 指针指向子类对象,可以调用子类中的方法p->func(); // 调用子类中的方法}int main() {test01();return 0;
}