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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Алена
сообщение 18.11.2006 17:33
Сообщение #2


Гость






Цитата
дык вот....я даже не знаю с чего начать...
Начни с построения иерархии с "заглушками" - пустыми методами, или методами, только печатающими, какие действия они должны производить:


#include "iostream.h"

// Базовый класс для всех фигур, чтобы были возможны, например,
// операции сравнения площади в любых вариантах
class TFigure {

public:
TFigure(const char *s = ""): name(s) {
cout << name << " created ..." << endl;
}

// чисто виртуальный метод, вычисление площади,
// будет переопределяться в каждом производном классе
virtual double getS() const = 0;

protected:
// Название фигуры
const char *name;

};

// Определяем класс - наследник от TFigure
class TTriangle: public TFigure {
public:

// Конструктор... В процессе работы над программой тебе придется
// добавить сюда еще несколько параметров, гарантирующих однозначное
// определение треугольника на плоскости (например, координаты 3-х точек),
// но для начала - "пустышка"
TTriangle() : TFigure("triangle") {
}

// Переопределение метода расчета площади
// (если этого не сделать, то нельзя будет создать экземпляр класса TTriangle,
// т.к. считается, что он содержит неперекрытую ЧИСТО виртуальную функцию)
double getS() const {
return 10.0; // Для простоты будем считать, что ВСЕ треугольники имеют площадь = 10
}

};

class TQuadrate: public TFigure {
public:

// Аналогично, добавить в конструктор необходимые параметры
// для задания квадрата на плоскости
TQuadrate() : TFigure("square") {
}

double getS() const {
return 12.0;
}

};

// Сравнение площадей двух фигур... Возможны любые комбинации, главное,
// чтобы T1 и T2 были потомками (в любом "поколении") TFigure
int Compare(const TFigure &T1, const TFigure &T2) {

// Благодаря виртуальным функциям, вызываются методы getS именно тех классов,
// экземпляры которых переданы как фактические параметры в функцию
return (T1.getS() < T2.getS()) ? -1 : 1;
}


// Основная программа пока умеет немного - только задать один или несколько экземпляров
// одного из вышеопределенных классов ...
int main() {

TTriangle T1;
// ... напечатать площадь этого объекта ...
cout << T1.getS() << endl;

TQuadrate T2;
cout << T2.getS() << endl;

// ... и вывести результат сравнения плохадей в одном порядке ...
cout << Compare(T1, T2) << endl;
// ... и в другом тоже (знаки результатов должны быть противоположными)
cout << Compare(T2, T1) << endl;

return 0;

}

Теперь у тебя есть "основа" программы, и ты можешь добавлять в нее все необходимые функции... Маленький совет: не добавляй все сразу - ни к чему хорошему это не приведет... Например, добавь инициализацию треугольника тремя точками, отработай программу, проверь, что все в порядке, только потом добавляй инициализацию квадрата...

Можешь изменить Compare так, чтобы при одинаковых площадях возвращался 0...

Что не будет получаться - пиши smile.gif

Сообщение отредактировано: Алена - 18.11.2006 17:34
 К началу страницы 
+ Ответить 

Сообщений в этой теме
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


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

 



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