|
Чисто виртуальные дестурукторы?
|
|||
---|---|---|---|
#18+
Абстрактный базовый класс: Код: plaintext 1. 2. 3. 4. 5. 6.
Класс - наследник: Код: plaintext 1. 2. 3. 4. 5. 6.
При построении получаю ошибку линковщика: ссылка на неразрешенный символ "public: virtual __thiscall AB::~AB(void)"... ... Исправляется заменой Код: plaintext 1.
на Код: plaintext 1.
Отчего так? Именно с абстрактными деструкторами. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2018, 00:44 |
|
Чисто виртуальные дестурукторы?
|
|||
---|---|---|---|
#18+
Фэйтл ЭраКласс - наследник: Ты, наверное, хотел написать здесь ~C(). Деструкторы не оверридятся. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2018, 00:56 |
|
Чисто виртуальные дестурукторы?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovФэйтл ЭраКласс - наследник: Ты, наверное, хотел написать здесь ~C(). Деструкторы не оверридятся. 1. Да, ~C(), опечатка, спасибо. 2. Оверридятся. Если убрать у деструктора базового класса опцию "virtual" - сразу компилятор закричит на дочерний класс: error C3668 C::~C: метод со спецификатором переопределения "override" не переопределяет какие-либо методы базового класса Как бы лишнее напоминание насчет того, что у предка должен быть виртуальный деструктор. 3. Ну, вопрос не в этом. А в том, отчего "чистый виртуальный метод" (деструктор - он же метод?) требует явной реализации при линковке. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2018, 01:21 |
|
Чисто виртуальные дестурукторы?
|
|||
---|---|---|---|
#18+
Фэйтл ЭраЕсли убрать у деструктора базового класса опцию "virtual" - сразу компилятор закричит на дочерний класс: error C3668 C::~C: метод со спецификатором переопределения "override" не переопределяет какие-либо методы базового класса А зачем ты его объявил override? virtual-overide означает, что один из методов будет вызван, в зависимости от типа объекта. Тогда как при наследовании все деструкторы вызываются. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2018, 05:55 |
|
Чисто виртуальные дестурукторы?
|
|||
---|---|---|---|
#18+
Фэйтл Эра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 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2018, 08:30 |
|
|
start [/forum/topic.php?fid=57&fpage=16&tid=2017725]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 140ms |
0 / 0 |