Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Чисто виртуальные дестурукторы? / 6 сообщений из 6, страница 1 из 1
13.11.2018, 00:44
    #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
13.11.2018, 00:56
    #39732095
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто виртуальные дестурукторы?
Фэйтл ЭраКласс - наследник:

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

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

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

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

3. Ну, вопрос не в этом. А в том, отчего "чистый виртуальный метод" (деструктор - он же метод?) требует явной реализации при линковке.
...
Рейтинг: 0 / 0
13.11.2018, 05:55
    #39732116
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто виртуальные дестурукторы?
Фэйтл ЭраЕсли убрать у деструктора базового класса опцию "virtual" - сразу компилятор закричит на дочерний класс:
error C3668 C::~C: метод со спецификатором переопределения "override" не переопределяет какие-либо методы базового класса
А зачем ты его объявил override?
virtual-overide означает, что один из методов будет вызван, в зависимости от типа объекта. Тогда как при наследовании все деструкторы вызываются.
...
Рейтинг: 0 / 0
13.11.2018, 08:30
    #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
13.11.2018, 11:14
    #39732290
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чисто виртуальные дестурукторы?
Barlone,

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


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