powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Чисто виртуальные дестурукторы?
6 сообщений из 6, страница 1 из 1
Чисто виртуальные дестурукторы?
    #39732094
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Абстрактный базовый класс:
Код: plaintext
1.
2.
3.
4.
5.
6.
class  AB
{
  public :
    virtual ~ AB () = 0 ;
    virtual  void mmm () = 0;
};



Класс - наследник:

Код: plaintext
1.
2.
3.
4.
5.
6.
class  С : public  AB
{
  public :
    ~ AB () override {};
    void mmm () override {cout << "Hi!" << endl ;};
};


При построении получаю ошибку линковщика: ссылка на неразрешенный символ "public: virtual __thiscall AB::~AB(void)"...
...
Исправляется заменой
Код: plaintext
1.
    virtual ~ AB () = 0 ;

на
Код: plaintext
1.
     virtual ~ AB () {} ;


Отчего так? Именно с абстрактными деструкторами.
...
Рейтинг: 0 / 0
Чисто виртуальные дестурукторы?
    #39732095
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл ЭраКласс - наследник:

Ты, наверное, хотел написать здесь ~C().
Деструкторы не оверридятся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Чисто виртуальные дестурукторы?
    #39732099
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovФэйтл ЭраКласс - наследник:

Ты, наверное, хотел написать здесь ~C().
Деструкторы не оверридятся.

1. Да, ~C(), опечатка, спасибо.

2. Оверридятся. Если убрать у деструктора базового класса опцию "virtual" - сразу компилятор закричит на дочерний класс:
error C3668 C::~C: метод со спецификатором переопределения "override" не переопределяет какие-либо методы базового класса
Как бы лишнее напоминание насчет того, что у предка должен быть виртуальный деструктор.

3. Ну, вопрос не в этом. А в том, отчего "чистый виртуальный метод" (деструктор - он же метод?) требует явной реализации при линковке.
...
Рейтинг: 0 / 0
Чисто виртуальные дестурукторы?
    #39732116
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл ЭраЕсли убрать у деструктора базового класса опцию "virtual" - сразу компилятор закричит на дочерний класс:
error C3668 C::~C: метод со спецификатором переопределения "override" не переопределяет какие-либо методы базового класса
А зачем ты его объявил override?
virtual-overide означает, что один из методов будет вызван, в зависимости от типа объекта. Тогда как при наследовании все деструкторы вызываются.
...
Рейтинг: 0 / 0
Чисто виртуальные дестурукторы?
    #39732143
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эра3. Ну, вопрос не в этом. А в том, отчего "чистый виртуальный метод" (деструктор - он же метод?) требует явной реализации при линковке. https://en.cppreference.com/w/cpp/language/abstract_class The definition of a pure virtual function may be provided (and must be provided if the pure virtual is the destructor): the member functions of the derived class are free to call the abstract base's pure virtual function using qualified function id. This definition must be provided outside of the class body (the syntax of a function declaration doesn't allow both the pure specifier = 0 and a function body). https://en.cppreference.com/w/cpp/language/destructor A destructor may be declared pure virtual, for example in a base class which needs to be made abstract, but has no other suitable functions that could be declared pure virtual. Such destructor must have a definition, since all base class destructors are always called when the derived class is destroyed
...
Рейтинг: 0 / 0
Чисто виртуальные дестурукторы?
    #39732290
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlone,

Спасибо.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Чисто виртуальные дестурукторы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]