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

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

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

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

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

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

Подскажите, пожалуйста, как бороться с этой проблемой
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2015, 14:53     Объясните как объявить абстрактный класс, и при этом не тащить виртуальные методы в производные классы
Посмотрите здесь:
Абстрактный класс, виртуальные методы C++
C++ Создать класс - данные - абстрактный базовый класс. Создать производные классы
C++ Создать абстрактный класс с виртуальной функцией вычисления нормы и модуля; определить производные классы с собственными функциями
C++ Создать абстрактный базовый класс Figure с виртуальной функцией Периметр. Создать производные классы Rectangle
Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы C++
Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы: Пирамида, Шар со своими функциями объема C++
C++ Абстрактный класс.производные функции
C++ Абстрактный класс и его производные
Как объявить функцию, которая имеет место быть только в некоторых дочерних классах, а базовый класс абстрактный? C++
C++ Создать абстрактный базовый класс и производные
абстрактный класс как реализовать данные, над которыми методы выполняют какие-либо действия C++
Виртуальный методы, абстрактный класс. C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
2399 / 1093 / 237
Регистрация: 30.11.2013
Сообщений: 3,620
27.12.2015, 15:01     Объясните как объявить абстрактный класс, и при этом не тащить виртуальные методы в производные классы #2
сделай чисто вирт деструктор - "тащить" дестр легче, так как он действительно нужен в 95% случаев.
hoggy
6369 / 2587 / 452
Регистрация: 15.11.2014
Сообщений: 5,722
Завершенные тесты: 1
27.12.2015, 19:27     Объясните как объявить абстрактный класс, и при этом не тащить виртуальные методы в производные классы #3
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
сделай чисто вирт деструктор
только не забудьте реализовать его туловище.
что бы не нарваться на ошибки линкера,
или что хуже - рантайма.
DrOffset
6917 / 4110 / 939
Регистрация: 30.01.2014
Сообщений: 6,905
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     Объясните как объявить абстрактный класс, и при этом не тащить виртуальные методы в производные классы
Ответ Создать тему
Опции темы

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