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

Непонятки с абстрактным классом - C++

Восстановить пароль Регистрация
 
newbie666
Заблокирован
13.11.2013, 10:44     Непонятки с абстрактным классом #1
У нуба возник вопрос
Вот объявляю я абстрактный Inline класс. Ну под инлайн я имею ввиду, что он без cpp, реализация в H.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
class HEAD
{
public:
    HEAD(void)
    {
    }
    virtual ~HEAD(void)
    {
    }
    virtual void Hello() = 0;   
};
Потом делаю класс наследник (ну тут с H и CPP файлом, хотя разницы нет):
C++
1
2
3
4
5
6
7
8
#pragma once
#include "head.h"
class BUG : public HEAD
{
public:
    BUG(void);
    virtual ~BUG(void);
};
компилирую и всё собирается, а ведь чёрт побери, компилятор должен ругаться на то, что я не добавил реализацию чисто виртуальной функции Hello в класс BUG, т.к. он наследник абстрактного класса HEAD с чисто виртуальной функцией Hello, как же так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2013, 10:44     Непонятки с абстрактным классом
Посмотрите здесь:

Теория по абстрактным типам данных C++
работа с классом C++
C++ Проблемки с классом
работа с классом C++
C++ Кортеж с абстрактным типом как параметр шаблона + smart_ptr
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
13.11.2013, 10:54     Непонятки с абстрактным классом #2
newbie666, а с чего ругаться? Экземпляра класса же нет.
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
13.11.2013, 10:55     Непонятки с абстрактным классом #3
Цитата Сообщение от newbie666 Посмотреть сообщение
компилирую и всё собирается, а ведь чёрт побери, компилятор должен ругаться на то, что я не добавил реализацию чисто виртуальной функции Hello в класс BUG, т.к. он наследник абстрактного класса HEAD с чисто виртуальной функцией Hello, как же так?
Не должен ругаться. Производный класс сам теперь тоже абстрактный, где проблема?)
d1skort
20 / 20 / 0
Регистрация: 10.02.2013
Сообщений: 75
13.11.2013, 10:58     Непонятки с абстрактным классом #4
Цитата Сообщение от ct0r Посмотреть сообщение
Не должен ругаться. Производный класс сам теперь тоже абстрактный, где проблема?)
Это как? При создании экземпляра должен же поругаться. Или не так?
newbie666
Заблокирован
13.11.2013, 11:00  [ТС]     Непонятки с абстрактным классом #5
Цитата Сообщение от Tulosba Посмотреть сообщение
а с чего ругаться? Экземпляра класса же нет.
аа точняк

Но тут другой вопрос... Вот хочу я сделать как бы кучу абстрактных классов, ну они там будут как - то наследоваться друг от друга... Так вот, это будет как бы каркас интерфейсов и хотелось бы, чтоб компилятор мне напоминал, ну чисто для формальности, чтоб я в каждом классе наследнике абстрактного класса дописывал бы декларацию чисто виртуальных функций родителя... Понятно, что они туда автоматом добавятся, точнее добавятся в таблицу виртуальных функций, а не в код... Но если классов куча, то хотелось бы их туда вручную дописывать, чтоб код был понятней и меньше путаницы.... Так никак сделать нельзя ?
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
13.11.2013, 11:00     Непонятки с абстрактным классом #6
Цитата Сообщение от d1skort Посмотреть сообщение
Это как? При создании экземпляра должен же поругаться. Или не так?
Ну раз он тоже абстрактный, то должен. Только что-то я не вижу места, где ты создаешь объект.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
13.11.2013, 11:09     Непонятки с абстрактным классом #7
Цитата Сообщение от newbie666 Посмотреть сообщение
чтоб я в каждом классе наследнике абстрактного класса дописывал бы декларацию чисто виртуальных функций родителя...
Зачем? При первом же экземпляре ругнется компилер всё равно. Или я что-то не так понял?
newbie666
Заблокирован
13.11.2013, 11:15  [ТС]     Непонятки с абстрактным классом #8
Цитата Сообщение от Tulosba Посмотреть сообщение
Зачем? При первом же экземпляре ругнется компилер всё равно
ну так то оно так, просто если этих классов будет 100, то ругаться будет долго... Просто когда делаешь потомка от сто первого родителя хотелось бы просто глянуть в H файл родителя и посмотреть, реализацию чего мне надо добавить.... А каждый раз перекоплиливать - не по фуншую, а если сборка идёт 20 минут.... Может есть какие - то фишки в студии для того что дописывались в код класса потомка фисто виртуальные функции, которые необходимо реализовать? (ну что не шерстеть по сотне классов с поиском того, что надо реализовать...)
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
13.11.2013, 11:22     Непонятки с абстрактным классом #9
Цитата Сообщение от newbie666 Посмотреть сообщение
для того что дописывались в код класса потомка фисто виртуальные функции, которые необходимо реализовать?
Компилеру (да и среде) неведомо какой класс должен быть - абстрактный или нет. Это становится ясно, только когда Вы пытаетесь создать экземпляр класса. Т.е. становится ясно, что он не должен быть абстрактным. А абстрактных классов в иерархии может быть больше одного.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2013, 11:30     Непонятки с абстрактным классом
Еще ссылки по теме:

Описать абстрактный класс породить от него еще два,один должен остаться абстрактным,другой должен быть способен пораждать объекты C++
Полиморфизм с абстрактным классом C++
C++ Как сделать код абстрактным

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

Или воспользуйтесь поиском по форуму:
newbie666
Заблокирован
13.11.2013, 11:30  [ТС]     Непонятки с абстрактным классом #10
ладно...понял. спс
Yandex
Объявления
13.11.2013, 11:30     Непонятки с абстрактным классом
Ответ Создать тему
Опции темы

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