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

Абстрактные и производные классы С++ - C++

Восстановить пароль Регистрация
 
riki34
2 / 2 / 0
Регистрация: 10.11.2013
Сообщений: 24
10.11.2013, 16:30     Абстрактные и производные классы С++ #1
Проблема:
Есть базовый класс "Фигура", и производные: "Точка", "Круг", "Прямоугольник", "Треугольник".
Надо сделать чистую виртуальную функцию Transform, и переопределить её в производных классах.
Принцип работы функции Transform: функция должна трансформировать точку в круг, круг в прямоугольник, прямоугольник в треугольник.
Когда я пытался реализовать данную функцию то наткнулся на проблему: При переходе от точки к кругу надо передавать 1 параметр(радиус), от круга к прямоугольнику 0 параметров, от прямоугольника к треугольнику 1 параметр(точка).
Вопрос: По какому принципу можно реализовать данную функцию, чтобы ею можно было управлять через базовый класс?
Вот классы которые я описал:
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
37
38
39
40
41
42
43
44
45
// Базовый класс
 
class Figure {
public:
    virtual Figure& Transform() = 0;
};
 
//Класс точка
 
class Point : public Figure {
protected:
    int x, y;
public:
    Point(int, int);
    void SetX(int);
    void SetY(int);
    int GetX();
    int GetY();
    Figure& Transform();
};
 
//Класс круг
 
class Circle : public Point {
private:
    int Radius;
public:
    Circle(Point, int);
    void SetRadius(int);
    int GetRadius();
    Figure& Transform();
};
 
//Класс прямоугольник
 
class Rectangle : public Figure {
private:
    Point mas[4];
public:
    Rectangle(Point point1, Point point2);
    Rectangle(Point mas[4]);
    void SetPoint(Point point, int number);
    Point GetPoint(int number);
    Figure& Transform();
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2013, 16:30     Абстрактные и производные классы С++
Посмотрите здесь:

C++ абстрактные классы
Абстрактные и производные классы C++
C++ Абстрактные классы
Абстрактные классы C++
Абстрактные классы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
10.11.2013, 17:57     Абстрактные и производные классы С++ #2
riki34, да тебе нужно все функции перегрузить в базовом классе создать 3 винтуальные функции с разными параметрами, а в производных определить их где нужно с параметром, а где не нужно без параметра. и затем уже можешь не бояться вызывать с параметром или без отак Base* B= указатель на производный класс. B->transform(нужный параметр). ну это способ когда в базовом классе три перегруженные функции transform() и тебе явно нужно знать какой объект находиться в указателе на базовый класс, короче должен проверять с помощью dynamic_cast<>() тип объекта.

Короче полиморфизма так не будет, лучше ничего не создавать в базовом классе, а просто проверять тип объекта который будет в указателе на базовый класс и явно вызывать метод с параметрами или без, смотря какой производный объект у тебя в указателе.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.11.2013, 18:57     Абстрактные и производные классы С++ #3
riki34, почему круг объявлен как производный класс от точки? Круг является точкой?
Цитата Сообщение от riki34 Посмотреть сообщение
функция должна трансформировать точку в круг, круг в прямоугольник, прямоугольник в треугольник
Значит должно быть правило по которому:
- для точки добавляется радиус,
- для круга задаются координаты прямоугольника,
- для прямоугольника задаются координаты треугольника.
Transform() должна возвращать новый объект (а не ссылку).
riki34
2 / 2 / 0
Регистрация: 10.11.2013
Сообщений: 24
10.11.2013, 19:12  [ТС]     Абстрактные и производные классы С++ #4
Ну, я себе так и думал, спасибо.

Добавлено через 4 минуты
Нет, прямоугольник круг должен превращатся в квадрат(который тоже есть прямоугольником) относительно центра круга и сторонами равными радиусу(Ну это я так думаю).
Yandex
Объявления
10.11.2013, 19:12     Абстрактные и производные классы С++
Ответ Создать тему
Опции темы

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