IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> классы,работа с геометрическими объектами., С++
Tribunal
сообщение 18.11.2006 12:33
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


Задание следующее:
Написать программу,демонстрирующую работу с объектами двух типов Т1 и Т2,для чего создать систему соответствующих классов. Каждый объект должен иметь идентификатор(в виде произвольной строки символов) и одно или несколько полей для хранения состояния (текущего значения) объекта.
Клиенту(ф-ии main) должны быть доступны следующеие основные операции(методы):создать объект,удалить объект,показать значение объекта и прочие дополнительные операции,которые будут указаны ниже.Операции по созданию и удалению объектов инкапсулировать в классе Factory.Предусмотреть место,позволяющее продемонстрировать заданные операции.
При необходимости в разрабатываемые классы добавляются дополнительные методы(например,конструктор копирования,операция присваивания и тп)для обеспечения надлежащего функционирования этих классов.

Типы объектов
Класс \ Объект
-------------------------------------------------
Triangle \ Треугольник
Quadrate \ Квадрат
Rectangle \ Прямоуголник
Tetragon \ Четырёхуголник
Pentagon Пятиугольник

Перечень дополнительных операций
Операция(метод) \ Описание
-------------------------------------------------------------
Move() \ Переместить объект на плоскости
Compare(T& ob1,T& ob2) \ Сравнить объект 1 и 2 по площади
IsIntersect(T& ob1,T& ob2) \ Определить факт пересечения объектов 1,2(есть\нет)
IsInclude(T& ob1,T& ob2) \ Определить факт включения объекта 2 в объект 1.

T1 \ T2 \ Операция(Метод)
----------------------------------------------
Triangle \ Pentagon \ Move(),Compare(T&,T&)



дык вот....я даже не знаю с чего начать...
помогите,пожалуйста.


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Алена
сообщение 20.11.2006 0:35
Сообщение #2


Гость






1) ты забыла одну закрывающую скобку (завершающую в функции TFigure::move_it), и получила несколько наведенных ошибок... Кстати, компилятор предупреждает тебя, что функции, содержащие for не будут inline-функциями, поэтому их описания лучше выносить за пределы определения класса...

2)
double getS() const {
return
0.5*(
TPoint[1].y*TPoint[2].x-TPoint[2].y*TPoint[1].x+
TPoint[2].y*TPoint[3].x-TPoint[3].y*TPoint[2].x-
TPoint[1].y*TPoint[3].x+TPoint[1].y*TPoint[1].x
);
}
это неправильно... Чтобы обращаться к точкам, тебе достаточно:
    double getS() const
{
return 0.5 * (pts[0].y*pts[1].x - pts[1].y*pts[0].x +
pts[1].y*pts[2].x - pts[2].y*pts[1].x -
pts[0].y*pts[2].x + pts[0].y*pts[0].x);
}
- обращаться по имени переменной, а не типа... Причем, заметь, массивы в С++ индексируются с 0 а не с 1... Та же самая ошибка у тебя - при попытке считать координаты точек в конструкторе TPentagon...

3) В классе TPentagon деструктор должен называться ~TPentagon(), а не ~TTriangle()...

4) В классе TPentagon переменная pts не определена в классе, а определена только в конструкторе, т.е. при выходе из конструктора ты все точки потеряешь... Перенеси определение переменной в сам класс...

5) еще одна ощибка - в функции Compare: ты описываешь ее, как возвращающую символ, а пытаешься вернуть строку... Символ - это одиночные апострофы, строка - кавычки... Вот правильное определение:
char Compare(const TFigure &T1, const TFigure &T2)
{
return (T1.getS() < T2.getS()) ? '<' : '>';
}


6) У тебя нет конструктора по умолчанию для TTriangle и для TPentagon. А ты пытаешься его вызвать...
  TTriangle T1;
А вот как от этого избавиться - это уже вопрос к тебе: ты все-таки решила, что хочешь вводить координаты точек прямо в конструкторе? Тогда делай именно конструкторы по умолчанию... Для TTriangle, например, такой:
    TTriangle(int numPoints = 3) : TFigure("triangle")
{
pts = new TPoint[numPoints];
for(int i=0;i<numPoints;i++)
{
TPoint p;
cout << "Enter coordinates of apex" << i+1 << ":";
cin << p.x << p.y;

pts[i] = p;
}
}


7) С show_position ты тоже что-то намудрила, там должна быть либо виртуальная функция (переопределяемая в наследниках), как и в случае с getS(), либо... Хотя нет, ты сделай пока виртуальную, а я тебе потом покажу, как еще можно сделать...

Ну, вроде пока все. Постарайся исправить эти ошибки smile.gif

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

Сообщений в этой теме
Tribunal   классы,работа с геометрическими объектами.   18.11.2006 12:33
Алена   Начни с построения иерархии с "заглушками...   18.11.2006 17:33
Tribunal   а вот вопросик возник. когда создаю фигуру,ее созд...   18.11.2006 18:01
Алена   Есть, конечно... Что же ты хочешь передавать 6 раз...   18.11.2006 19:09
Tribunal   вот попыталась сделать конструктор... я хочу,чтобы...   19.11.2006 6:59
Tribunal   вот то,что у меня получилось. я не очень разобрала...   19.11.2006 8:29
Алена   1) ты забыла одну закрывающую скобку (завершающую ...   20.11.2006 0:35
Tribunal   воть...теперь он еще и на ввод-вывод ругается в не...   20.11.2006 12:01
Алена   Смотри, как я переделала классы... Твоя программа ...   20.11.2006 13:51
Tribunal   огромное спасибо!!! :) :) сейчас со вс...   20.11.2006 14:19
volvo   Ориентированная площадь вычисляется в 3 строки: ...   20.11.2006 15:06
Tribunal   а я с площадью сама разобралась!=) но всё равн...   22.11.2006 14:45
Tribunal   в этой программе мне нужно задействовать дружестве...   2.12.2006 7:08
Tribunal   не могу я понять смысл дружестенных функций...поэт...   4.12.2006 16:02
volvo   Дружественная функция? Как бы объяснить... Ага......   4.12.2006 18:12
Tribunal   аха...вроде понятно...спасибо большое!=) а не ...   4.12.2006 19:07
Tribunal   а если использовать этот алгоритм для проверки пер...   7.12.2006 16:33
volvo   Точка - она и в Африке точка, так что будет работа...   7.12.2006 16:47
Tribunal   в общем я решила сравнивать координаты максимумов ...   9.12.2006 16:42
Tribunal   изменила код выше   10.12.2006 18:49
Tribunal   воть....как думаете по какой причине можт IsInters...   17.12.2006 12:47
volvo   Приведи пример ввода, на котором выдаются неправил...   17.12.2006 13:10
Tribunal   например, треугольник 0 0 0 5 5 0 прямоугольник 1 ...   17.12.2006 16:01
Tribunal   не помогло даже добавление вроде как необходимого ...   17.12.2006 16:38
Tribunal   всё)сообразила..всё дело было в типах   18.12.2006 17:01
Гость   Это задача из учебника Павловской "Объектно-о...   25.12.2006 8:01
Гость   Это задача из учебника Павловской "Объектно-...   30.11.2007 11:44
Начинающей программер   Извините, а ктонибудь не может немного переписать ...   28.01.2007 18:22
volvo   Показывай, КАК именно пробовал делать (что, куда и...   28.01.2007 18:28
Гость   Я использовал последний пример от Tribunal. Так во...   29.01.2007 0:48
volvo   Я, кстати, только что заметил ошибку в твоих рассу...   29.01.2007 0:59
программер начинающий   т.е. мне надо написать в ф-ии main: new *T1, *T2; ...   29.01.2007 17:03


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 16.08.2025 14:08
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"