Форум программистов, компьютерный форум CyberForum.ru

Объясните как объявить абстрактный класс, и при этом не тащить виртуальные методы в производные классы - C++

Восстановить пароль Регистрация
 
Гр Хо
1 / 1 / 0
Регистрация: 11.12.2015
Сообщений: 24
27.12.2015, 14:53     Объясните как объявить абстрактный класс, и при этом не тащить виртуальные методы в производные классы #1
Суть вопроса - есть у меня класс, который я решаю сделать абстрактным. Как я понимаю что бы сделать класс абстрактным необходимо просто приписать ( =0 ) после определения любого виртуального метода этого класса. Этот метод становится чисто виртуальным, тем самым автоматически делая класс абстрактным.
И все бы ничего, но вот только меня смущает, что приходится тащить этот чисто виртуальный метод в производные классы, хотя он мне нужен не во всех производных классах, а только в некоторых...

Подскажите, пожалуйста, как бороться с этой проблемой
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2015, 14:53     Объясните как объявить абстрактный класс, и при этом не тащить виртуальные методы в производные классы
Посмотрите здесь:

C++ Абстрактный класс и его производные
Виртуальный методы, абстрактный класс. C++
абстрактный класс как реализовать данные, над которыми методы выполняют какие-либо действия C++
Как объявить функцию, которая имеет место быть только в некоторых дочерних классах, а базовый класс абстрактный? C++
C++ Абстрактный класс.производные функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
27.12.2015, 15:01     Объясните как объявить абстрактный класс, и при этом не тащить виртуальные методы в производные классы #2
сделай чисто вирт деструктор - "тащить" дестр легче, так как он действительно нужен в 95% случаев.
hoggy
5230 / 2121 / 404
Регистрация: 15.11.2014
Сообщений: 4,812
Завершенные тесты: 1
27.12.2015, 19:27     Объясните как объявить абстрактный класс, и при этом не тащить виртуальные методы в производные классы #3
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
сделай чисто вирт деструктор
только не забудьте реализовать его туловище.
что бы не нарваться на ошибки линкера,
или что хуже - рантайма.
DrOffset
6462 / 3836 / 887
Регистрация: 30.01.2014
Сообщений: 6,631
27.12.2015, 19:45     Объясните как объявить абстрактный класс, и при этом не тащить виртуальные методы в производные классы #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Гр Хо,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class AbstractBase
{
public:
    virtual void foo() = 0;
    
    virtual ~AbstractBase() {}
};
 
class NonAbstractBase 
    : public AbstractBase
{
    /*virtual*/ void foo() {} // пустая или реализация "по умолчанию"
};
 
/* Класс, где нужно переопределелять чистовиртуальную функцию */
class NeedAbstract 
    : public AbstractBase
{
public:
    /*virtual*/ void foo() 
    {
        // impl
    }
};
 
/* Класс, где не нужно */
class NotNeedAbstract
    : public NonAbstractBase
{
};
Yandex
Объявления
27.12.2015, 19:45     Объясните как объявить абстрактный класс, и при этом не тащить виртуальные методы в производные классы
Ответ Создать тему
Опции темы

Текущее время: 17:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru