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

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

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

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

13.11.2013, 10:44. Просмотров 265. Ответов 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, как же так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2013, 10:44     Непонятки с абстрактным классом
Посмотрите здесь:

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

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

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

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

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

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

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

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

Работа с классом - C++
Необходимо написать класс который будет переводить из 16-ой системы счисления числа в 10-ю систему счисления, классы только неделю назад...

Ошибка с классом в C++ - C++
#include <iostream> using namespace std; class Cat { public: Cat(int initAge); ~Cat(); void SetAge(int age); int...

программа с классом - C++
Помогите пожалуйста с программой, в которой класс sphere представляет шары. Конструктор с параметрами позволяет задать номер, цвет и радиус...

Ошибка с классом. - C++
Здравствуйте. Возникла проблема с классом. http://codepad.org/XpTrKcAC В чем может быть проблема?

работа с классом - C++
Напсал код: #include <IOSTREAM> #include <fstream> #include "rus.h" #include "work.h" using namespace std; class Temperatura ...


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

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

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