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

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

Войти
Регистрация
Восстановить пароль
 
newbie666
Заблокирован
#1

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

13.11.2013, 10:44. Просмотров 268. Ответов 9
Метки нет (Все метки)

У нуба возник вопрос
Вот объявляю я абстрактный 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, как же так?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2013, 10:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятки с абстрактным классом (C++):

Работа с абстрактным классом - C++
Доброго времени суток! Имеется небольшой класс: #include <irrlicht.h> class EngineInit { public: IrrlichtDevice* device...

Полиморфизм с абстрактным классом - C++
Добрий день, нуждаюсь в помощи. У меня есть абстрактный класс IStudent_Manip и производный класс Student_Manipulator. Хочу сделать...

Ошибка при работе с абстрактным классом pair - C++
Всем доброго времени суток, стоит задача создать абстрактный класс pair и создать от него производный класс complex, определив при этом...

Создать иерархию наследования с абстрактным базовым классом - C++
Доброго времени суток! Помогите, пожалуйста, сделать: 2) Создать абстрактный базовый класс с виртуальной функцией "Площадь". Создать...

Теория по абстрактным типам данных - C++
В общем нужно сделать лабораторную работу по абстрактным типам данных на Си. Не могу найти подходящую теорию, подкиньте пожалуйста где есть...

Как сделать код абстрактным - C++
pojalusta pomagite u menya est cod dlya igri tetrisa no ya ne mogu sdelot evo abstraktnim!!! esli kto to mojet mne pomoch ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
13.11.2013, 10:54 #2
newbie666, а с чего ругаться? Экземпляра класса же нет.
1
ct0r
Игогошка!
1773 / 675 / 42
Регистрация: 19.08.2012
Сообщений: 1,287
Завершенные тесты: 1
13.11.2013, 10:55 #3
Цитата Сообщение от newbie666 Посмотреть сообщение
компилирую и всё собирается, а ведь чёрт побери, компилятор должен ругаться на то, что я не добавил реализацию чисто виртуальной функции Hello в класс BUG, т.к. он наследник абстрактного класса HEAD с чисто виртуальной функцией Hello, как же так?
Не должен ругаться. Производный класс сам теперь тоже абстрактный, где проблема?)
0
d1skort
20 / 20 / 0
Регистрация: 10.02.2013
Сообщений: 75
13.11.2013, 10:58 #4
Цитата Сообщение от ct0r Посмотреть сообщение
Не должен ругаться. Производный класс сам теперь тоже абстрактный, где проблема?)
Это как? При создании экземпляра должен же поругаться. Или не так?
0
newbie666
Заблокирован
13.11.2013, 11:00  [ТС] #5
Цитата Сообщение от Tulosba Посмотреть сообщение
а с чего ругаться? Экземпляра класса же нет.
аа точняк

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

Кортеж с абстрактным типом как параметр шаблона + smart_ptr - C++
Имеем кортеж (std::tuple) с абстрактным типом, параметризуем этим шаблон класса, экземпляров кортежа нигде не создаём. Создаём экземпляры...

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

Что Вы понимаете под "абстрактным типом", "абстракцией данных" и "абстрактными операциями"? - C++
А давайте займёмся археологией! И проследим как менялся смысл понятий "абстрактный тип данных", "абстракция данных" и "абстрактные...

Задача с классом - C++
Здравствуйте. Имеется следующий класс. class CClass { private: int *arr; const int size;


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.11.2013, 11:30
Ответ Создать тему
Опции темы

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