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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
#1

Абстрактный класс. Наследование - C++

23.09.2010, 23:56. Просмотров 1144. Ответов 13
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class polygon{
        int height, width, point p;
        e_color color;
    public:
        virtual ~polygon(){}
        virtual void draw() = 0;
        virtual void move() = 0;
        virtual void rotation() = 0;
};
 
class square: public polygon{
 
};
 
class line: public polygon{
 
};
 
class 3e: public polygon{
 
};
поясните......

В абстрактном классе нежелательно заводить поля? (int height, width, point p; e_color color)

тогда мне их объявлять надо в каждом производном ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2010, 23:56     Абстрактный класс. Наследование
Посмотрите здесь:

Наследование и абстрактный класс - C++
Вот сделал список с такими условиями #include <iostream> #include <conio.h> #include <string> using namespace std; ...

Абстрактный базовый класс и множественное наследование - C++
Общая постановка. Создать программу с абстрактным базовым классом и множественным наследованием. Помогите разобраться почему не работает,...

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

Абстрактный базовый класс и множественное наследование (либо иерархия классов) - C++
Помогите пожалуйста с задачей. Кое-что написал но еще далеко не все. Все ли пока правильно? Мобильные телефоны (наименование,...

абстрактный базовый класс - C++
Создать абстрактный базовый класс с виртуальной функцией – объем. Создать производные классы: параллелепипед, пирамида, шар со своими...

List и абстрактный класс - C++
Доброго времени суток. Есть интересная ситуация. Допустим у нас есть абстрактный клас Book. class Book { public: Book(void); ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
24.09.2010, 00:05     Абстрактный класс. Наследование #2
нежелательны те, которые по смыслу не должны быть у всех наследников, иначе это ухудшает архитектуру
общим для всех наследников будет только e_color color - его можно в абстрактном оставить
а остальные и объявлять в потомках

Добавлено через 5 минут
Цитата Сообщение от PointsEqual Посмотреть сообщение
virtual ~polygon(){}
можно не объявлять чисто виртуальным, чтобы потомки могли иметь право не переопределять деструктор
e_color color; надо перенести в protected естественно
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
24.09.2010, 00:25  [ТС]     Абстрактный класс. Наследование #3
Цитата Сообщение от alex_x_x Посмотреть сообщение
e_color color; надо перенести в protected естественно
точно.

Добавлено через 18 минут
компилятор волнуется что деструктор не виртуальный)
IchMors
97 / 93 / 4
Регистрация: 16.05.2010
Сообщений: 310
24.09.2010, 00:56     Абстрактный класс. Наследование #4
Цитата Сообщение от PointsEqual Посмотреть сообщение
компилятор волнуется что деструктор не виртуальный)
при использовании виртуальных функций - деструктор также должен быть виртуальным)
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 1
24.09.2010, 18:00     Абстрактный класс. Наследование #5
Точнее говоря, деструктор должен быть тогда, когда мы уничтожаем созданные с помощью new объекты производных классов через указатели на базовый. Что в большинстве случаев и происходит при использовании виртуальных функций (хотя взаимосвязь не стопроцентная).
Mr.X
Эксперт С++
3042 / 1687 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
24.09.2010, 19:51     Абстрактный класс. Наследование #6
Цитата Сообщение от alex_x_x Посмотреть сообщение
можно не объявлять чисто виртуальным, чтобы потомки могли иметь право не переопределять деструктор
Не получится, так как деструктор не наследуется. Даже если вы его "не переопределите" в потомке, компилятор его сам создаст.
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
24.09.2010, 20:43  [ТС]     Абстрактный класс. Наследование #7
а если в абстрактном классе есть массив field
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class polygon{
    protected:
        e_color color;
        int field[col][row];
 
    public:
        polygon(){
            for (int i = 0; i < row; ++i)
                for (int j = 0; j < col; ++j)
                    field[i][j] = 0;
        }
        virtual ~polygon(){}
        virtual void draw() = 0;
        virtual void move(int) = 0;
        virtual void rotation() = 0;
};
можно ли его так инициализировать в конструкторе?
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.09.2010, 22:26     Абстрактный класс. Наследование #8
Цитата Сообщение от PointsEqual Посмотреть сообщение
можно ли его так инициализировать в конструкторе?
До выхода C++0x - нет.
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
24.09.2010, 22:26  [ТС]     Абстрактный класс. Наследование #9
CyBOSSeR, а как инициализировать?
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.09.2010, 22:32     Абстрактный класс. Наследование #10
Цитата Сообщение от PointsEqual Посмотреть сообщение
CyBOSSeR, а как инициализировать?
Также как ты и делаешь сейчас:
Цитата Сообщение от PointsEqual Посмотреть сообщение
C++
1
2
3
for (int i = 0; i < row; ++i)
  for (int j = 0; j < col; ++j)
    field[i][j] = 0;
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
24.09.2010, 22:34     Абстрактный класс. Наследование #11
C++
1
memset( field, 0, sizeof(field) );
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
24.09.2010, 22:39  [ТС]     Абстрактный класс. Наследование #12
Цитата Сообщение от alex_x_x Посмотреть сообщение
memset( field, 0, sizeof(field) );
Это я так понимаю в конструкторе надо написать?
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.09.2010, 22:40     Абстрактный класс. Наследование #13
PointsEqual, это инициализация поля, являющегося POD'ом (встроенные типы, структуры и т.п.), нулями. Да, в конструкторе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2010, 22:40     Абстрактный класс. Наследование
Еще ссылки по теме:

И вновь абстрактный класс - C++
#ifndef TINTEGER_H #define TINTEGER_H class TInteger { public: TInteger() : _head(0), _lenght(0) {}; size_t GetLen(void)...

Виртуальный абстрактный класс - C++
Надеюсь мой вопрос будет не глупым. Есть класс исключений в пространстве имен std У него есть метод what Я создаю свой базовый класс...

Абстрактный базовый класс - C++
У меня имеется свой некоторый класс, для которого переопределена куча операций, в том числе и операторы + - * /, преподаватель дал задание...

Создать абстрактный класс - C++
И вот ещё одно.... ))) Тоже очень надо на завтра..... Это всё одно задание..... =) пожалуйста... :-[ Создать абстрактный...


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

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
24.09.2010, 22:40     Абстрактный класс. Наследование #14
логично было бы, а так где угодно
Yandex
Объявления
24.09.2010, 22:40     Абстрактный класс. Наследование
Ответ Создать тему
Опции темы

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