Перейти к содержанию

Последнее обновление:2026-10-12

C++ чисто виртуальные функции и абстрактные классы

Об авторе:

Личный официальный аккаунт:

wechat

1.Чисто виртуальные функции и абстрактные классы

Чисто виртуальная функция (или абстрактная функция) в C++ — это виртуальная функция, которую мы не реализуем! Мы только объявляем её! Чисто виртуальная функция объявляется путём присваивания 0 в объявлении!

// 抽象类
Class A {
public: 
    virtual void show() = 0; // 纯虚函数
    /* Other members */
}; 

  • Чисто виртуальная функция: виртуальная функция без тела
  • Абстрактный класс: класс, содержащий чисто виртуальные функции

Абстрактный класс может использоваться только как базовый класс для порождения новых классов; создавать объекты абстрактного класса нельзя. Указатели и ссылки на абстрактный класс -> указывают на объекты классов, порождённых от абстрактного класса!

Примеры кода: abstract_base.h, pure_virtual.cpp

2.Реализация абстрактного класса

Внутри абстрактного класса: в членской функции можно вызывать чисто виртуальную функцию, а внутри конструктора/деструктора использовать чисто виртуальную функцию нельзя.

Если класс порождён от абстрактного класса, он должен реализовать все чисто виртуальные функции базового класса, чтобы перестать быть абстрактным.

// A为抽象类
class A {
public:
    virtual void f() = 0;  // 纯虚函数
    void g(){ this->f(); }
    A(){}  // 构造函数
};

class B : public A{
public:
    void f(){ cout<<"B:f()"<<endl;}  // 实现了抽象类的纯虚函数
};

Пример кода: abstract.cpp

3.Важные моменты

4.Полный пример

Абстрактный класс наследуется и реализуется производным классом!

Пример кода: derived_full.cpp

Похожие темы

Комментарии