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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Гр Хо
1 / 1 / 0
Регистрация: 11.12.2015
Сообщений: 24
#1

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

27.12.2015, 14:53. Просмотров 189. Ответов 3
Метки нет (Все метки)

Суть вопроса - есть у меня класс, который я решаю сделать абстрактным. Как я понимаю что бы сделать класс абстрактным необходимо просто приписать ( =0 ) после определения любого виртуального метода этого класса. Этот метод становится чисто виртуальным, тем самым автоматически делая класс абстрактным.
И все бы ничего, но вот только меня смущает, что приходится тащить этот чисто виртуальный метод в производные классы, хотя он мне нужен не во всех производных классах, а только в некоторых...

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

C++ Абстрактный класс и его производные
Виртуальный методы, абстрактный класс. C++
абстрактный класс как реализовать данные, над которыми методы выполняют какие-либо действия C++
C++ Определить базовый класс и на его основе производные классы
Класс: Создать производные классы StraightLine, Ellipse, Hyperbola C++
Как объявить функцию, которая имеет место быть только в некоторых дочерних классах, а базовый класс абстрактный? C++
C++ Абстрактный класс.производные функции
C++ Создать абстрактный класс с виртуальной функцией вычисления нормы и модуля; определить производные классы с собственными функциями
C++ Создать абстрактный класс Vehicle. На его основе реализовать классы:
Абстрактный класс, виртуальные методы C++
C++ Определить класс «Шахматная фигура» и производные классы «Ферзь»
C++ Создать базовый класс Матрица и производные - методы работы с ней

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2302 / 1018 / 232
Регистрация: 30.11.2013
Сообщений: 3,374
27.12.2015, 15:01     Объясните как объявить абстрактный класс, и при этом не тащить виртуальные методы в производные классы #2
сделай чисто вирт деструктор - "тащить" дестр легче, так как он действительно нужен в 95% случаев.
hoggy
5715 / 2306 / 417
Регистрация: 15.11.2014
Сообщений: 5,149
Завершенные тесты: 1
27.12.2015, 19:27     Объясните как объявить абстрактный класс, и при этом не тащить виртуальные методы в производные классы #3
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
сделай чисто вирт деструктор
только не забудьте реализовать его туловище.
что бы не нарваться на ошибки линкера,
или что хуже - рантайма.
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
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     Объясните как объявить абстрактный класс, и при этом не тащить виртуальные методы в производные классы
Ответ Создать тему
Опции темы

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