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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
volodia-h
2 / 2 / 0
Регистрация: 02.03.2010
Сообщений: 76
#1

Построить абстрактный класс - C++

26.03.2011, 12:06. Просмотров 1400. Ответов 18
Метки нет (Все метки)

Никак не успеваю с лабораторными, помогите пожалуйста.
Построить абстрактный класс Locate, описывающий позицию на
экране, и производные классы Figure и Text, описания некоторых фигуру и
текст. Построить класс FiguraText производный от классов Figure и
Text. Написать функции (методы) Show () и Move () для всех
классов.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2011, 12:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Построить абстрактный класс (C++):

Класс: Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра. - C++
Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра. Создать производные классы: Rectangle...

Абстрактный класс, наследование, класс хранится в другом классе - C++
Нужна помощь. Написать программу: 1 класс. Имеется абстрактный класс который описывает какую-то сущность, например Человек. В абстрактном...

Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями - C++
Здравствуйте, пожалуйста помогите написать код к данной задаче, с таким условием: Создать абстрактный базовый класс Тройка чисел с...

Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ... - C++
Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ... как сделать...

Абстрактный класс/Класс интерфейс - C++
Не ловлю суть в чем разница между интерфейсом и абстрактным классом. И там и там у методов нету реализации. Ну интерфейс задает набор...

Создать класс - данные - абстрактный базовый класс. Создать производные классы - C++
Всем привет! У меня вот такая проблема.... Создать класс - данные - абстрактный базовый класс. Создать производные классы - данные типа...

18
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
26.03.2011, 12:13 #2
Наследовать классы Figure и Text от Locate - неправильный подход. Фигура и текс имеют позицию, а не являются ей. Поэтому здесь нужно агрегирование.
И не понятно с чего это Locate должен быть абстрактным. Ну есть у нее x, y, сеттеры, гетеры для них, еще какие-нибудь методы вроде Move(dx, dy). И где здесь абстрактность?
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
26.03.2011, 12:33 #3
Если проигнорировать указанный косяк в иерархии классов, то типо такого будет
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
31
32
33
34
35
36
struct Locate
{
    int x, y;
};
 
// Абстрактный
class Base
{
public:
    ~Base();
public:
    void Move() = 0;
    void Show() = 0;
 
    const Locate & GetLocate() const;
    void SetLocate( const Locate & loc );
private:
   Locate _locate;
};
 
// конкретные
class Figure : public virtual Base
{
...
};
 
class Text : public virtual Base
{
...
};
 
// Множественное наследование
class FigureText : public Figure, public Text
{
...
};
1
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
26.03.2011, 12:44 #4
Цитата Сообщение от Deviaphan Посмотреть сообщение
struct Locate
{
int x, y;
};
Вот о чем я и говорил: абстрактный Locate не нужен.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
26.03.2011, 12:46 #5
Цитата Сообщение от Deviaphan Посмотреть сообщение
Если проигнорировать указанный (slice'ом) косяк в иерархии классов
Как бы я про указанный ВАМИ косяк и говорю.
0
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
26.03.2011, 12:50 #6
Deviaphan, я просто хотел акцентировать внимание на том, что составитель задание чудак.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
26.03.2011, 12:52 #7
Я вполне могу представить ситуацию, когда это оправдано.)

C++
1
2
3
4
5
6
7
8
9
10
class Locate
{
public:
     // Точка в экранных координатах
     POINT Get() const = 0;
};
 
class Rectangular : public Locate;
class Cylindrical : public Locate;
class Spherical : public Locate;
0
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
26.03.2011, 12:55 #8
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я вполне могу представить ситуацию, когда это оправдано
Я не думаю, что и в таком случае это оправдано, надо всегда стараться пользоваться аггрегированием, а не наследованием.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
26.03.2011, 12:59 #9
Разумеется, класс Locate не будет корнем иерархии для Fogure и Text.)
Я к тому, что Locate вполне может быть абстрактным.

Добавлено через 27 секунд
Цитата Сообщение от slice Посмотреть сообщение
составитель задание чудак
Преподы такие преподы.)

Добавлено через 1 минуту
Цитата Сообщение от fasked Посмотреть сообщение
надо всегда стараться пользоваться агрегированием, а не наследованием
Не согласен. Агрегированием нужно пользоваться тогда, когда нужно пользоваться агрегированием. Аналогично для наследования.
0
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
26.03.2011, 13:03 #10
Хорошо, такой пример сойдет. Не знаю насколько он применим на практике, но для учебных целей сгодится.

Добавлено через 2 минуты
fasked, нет здесь как раз наследование в тему:
координата задается тремя числами, а как их интерпретировать определяется в потомках. Агрегированием такое лучше не делать.
0
volodia-h
2 / 2 / 0
Регистрация: 02.03.2010
Сообщений: 76
26.03.2011, 13:13  [ТС] #11
Спасибо канеш за внимание к теме), правда у меня есть еще одна загвоздка, к этой лабе надо предусмотреть ввод исходных данных с клавиатуры, используя датчик случайных чисел.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
26.03.2011, 13:14 #12
C++
1
2
3
4
5
int x;
cin >> x;
seed(x);
 
rand();
.)
1
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
26.03.2011, 13:16 #13
Цитата Сообщение от volodia-h Посмотреть сообщение
ввод исходных данных с клавиатуры, используя датчик случайных чисел.
ввод исходных данных с клавиатуры? используя датчик случайных чисел? O_о
не знаю, примотай изолентой аппаратный генератор случайных чисел к клавиатуре.
2
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
26.03.2011, 13:18 #14
Цитата Сообщение от slice Посмотреть сообщение
O_о
Я уже предложил инициализировать ЧСГ числом, введённым с клавиатуры.)
Шикарная постановка задачи, конечно.)
0
slice
35 / 78 / 4
Регистрация: 04.11.2010
Сообщений: 249
26.03.2011, 13:20 #15
Deviaphan
C++
1
2
3
cin >> x;
seed(x);
b = rand();
Насколько значение b "случайнее" чем x?
0
26.03.2011, 13:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2011, 13:20
Привет! Вот еще темы с ответами:

Абстрактный класс - C++
#include <iostream.h> #include <conio.h> #include <math.h> #include <windows.h> char bufRus; char* Rus(const char* text) { ...

Абстрактный класс - C++
вот у меня есть классы: class CCommand { public: virtual ~CCommand() {}; virtual void execute(CShape *selection)=0; virtual...

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

Абстрактный класс - C++
Есть такое задание: Сгенерируйте абстрактный класс типа фигура, создайте производные от него классы типа пятиугольник, прямоугольник. В...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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