![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Tribunal |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
Задание следующее:
Написать программу,демонстрирующую работу с объектами двух типов Т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
|
Алена |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата дык вот....я даже не знаю с чего начать... Начни с построения иерархии с "заглушками" - пустыми методами, или методами, только печатающими, какие действия они должны производить:#include "iostream.h" Теперь у тебя есть "основа" программы, и ты можешь добавлять в нее все необходимые функции... Маленький совет: не добавляй все сразу - ни к чему хорошему это не приведет... Например, добавь инициализацию треугольника тремя точками, отработай программу, проверь, что все в порядке, только потом добавляй инициализацию квадрата... Можешь изменить Compare так, чтобы при одинаковых площадях возвращался 0... Что не будет получаться - пиши ![]() Сообщение отредактировано: Алена - 18.11.2006 17:34 |
Tribunal |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
а вот вопросик возник.
когда создаю фигуру,ее создание следует делать по вершинам,так? есть ли смысл делать структуру ,скажем,ВЕРШИНА для определения координат... то бишь тогда при задействовании конструктора,надо будет в парметрах написать только названия вершин... или так нельзя? и где ее прописывать...за пределами класса или внутри,...тогда какого... -------------------- irreparabilium felix olivio rerum
|
Алена |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата есть ли смысл делать структуру ,скажем,ВЕРШИНА для определения координат... Есть, конечно... Что же ты хочешь передавать 6 разрозненных координат вместо трех пар? Лучше сделать структуру... Тем более, что используя эту структуру, будет проще, например, определить расстояние между точками... Каждая структура/класс должна заниматься своим делом, а не так, что один класс делает практически все, а остальные - просто для красоты...Цитата и где ее прописывать...за пределами класса или внутри А вот это зависит от того, будет ли твоя структура (TPoint, например) использоваться только в TFigure и наследниках, или планируется ее использование также и в других классах (которые никак не связаны с TFigure)? Если толко для вот этих типов фигур - тогда имеет смысл объявить внутри TFigure (как базового класса):
Это даст тебе возможность сделать, например, так: class TTriangle: public TFigure {, а в main() делать так: ... Кстати, заметь, что если TPoint описывается внутри класса TFigure, то нужно указывать его области видимости ( TFigure:: ) для того, чтобы компилятор понял, о чем идет речь... Если же ты определить TPoint снаружи - то этого делать будет не нужно... Внутри классов, унаследованных от базового область видимости указывать не нужно... Сообщение отредактировано: Алена - 18.11.2006 19:11 |
Tribunal |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
вот попыталась сделать конструктор...
я хочу,чтобы при обращении к конструктору запрашивались координаты вершин.так можно делать? что не так? Код class TTriangle: public TFigure { private: TPoint *pts; public: TTriangle(TPoint p1,TPoint p2,TPoint p3):TFigure("triangle") { pts = new TPoint[3]; for(int i=0;i<3;i++) { cout << "Enter coordinates of apex" << i+1 << ":"; cin << TPoint[i].x << TPoint[i].y; //вот здесь ошибку выдаёт } } ~TTriangle() { delete [] pts; } 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);; } }; и позже в main компилятор ругается на обращение к конструктору Код TTriangle T1; площадь треульника я вычисляла по половине опредлителя матрицы 1;1;1 x1;x2;x3 y1;y2;y3 а как вычислить площадь пятиугольника. ведь по моему заданию мне нужно работать именно с треугольником и пятиугольником Цитата T1 \ T2 \ Операция(Метод) ---------------------------------------------- Triangle \ Pentagon \ Move(),Compare(T&,T&) Сообщение отредактировано: volvo - 20.11.2006 0:37 -------------------- irreparabilium felix olivio rerum
|
Tribunal |
![]()
Сообщение
#6
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
вот то,что у меня получилось.
я не очень разобралась с общими методами для фигур,поэтому программа не компилируется. посмотрите,пожалуйста. в чем мои ошибки? Прикрепленные файлы ![]() -------------------- irreparabilium felix olivio rerum
|
Алена |
![]()
Сообщение
#7
|
Гость ![]() |
1) ты забыла одну закрывающую скобку (завершающую в функции TFigure::move_it), и получила несколько наведенных ошибок... Кстати, компилятор предупреждает тебя, что функции, содержащие for не будут inline-функциями, поэтому их описания лучше выносить за пределы определения класса...
2) double getS() const {это неправильно... Чтобы обращаться к точкам, тебе достаточно: double getS() const- обращаться по имени переменной, а не типа... Причем, заметь, массивы в С++ индексируются с 0 а не с 1... Та же самая ошибка у тебя - при попытке считать координаты точек в конструкторе TPentagon... 3) В классе TPentagon деструктор должен называться ~TPentagon(), а не ~TTriangle()... 4) В классе TPentagon переменная pts не определена в классе, а определена только в конструкторе, т.е. при выходе из конструктора ты все точки потеряешь... Перенеси определение переменной в сам класс... 5) еще одна ощибка - в функции Compare: ты описываешь ее, как возвращающую символ, а пытаешься вернуть строку... Символ - это одиночные апострофы, строка - кавычки... Вот правильное определение: char Compare(const TFigure &T1, const TFigure &T2) 6) У тебя нет конструктора по умолчанию для TTriangle и для TPentagon. А ты пытаешься его вызвать... TTriangle T1;А вот как от этого избавиться - это уже вопрос к тебе: ты все-таки решила, что хочешь вводить координаты точек прямо в конструкторе? Тогда делай именно конструкторы по умолчанию... Для TTriangle, например, такой: TTriangle(int numPoints = 3) : TFigure("triangle") 7) С show_position ты тоже что-то намудрила, там должна быть либо виртуальная функция (переопределяемая в наследниках), как и в случае с getS(), либо... Хотя нет, ты сделай пока виртуальную, а я тебе потом покажу, как еще можно сделать... Ну, вроде пока все. Постарайся исправить эти ошибки ![]() Это не так сложно, как кажется на первый взгляд, ты же только начинаешь ООП, а это - совершенно другой стиль программирования... |
Tribunal |
![]()
Сообщение
#8
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
воть...теперь он еще и на ввод-вывод ругается в нескольких местах...почти всех...=(
а если сделать ввод координат вершин вне конструктора,лучше будет?=) Прикрепленные файлы ![]() -------------------- irreparabilium felix olivio rerum
|
Алена |
![]()
Сообщение
#9
|
Гость ![]() |
Смотри, как я переделала классы... Твоя программа стала уже сейчас тяжело читаемой, представляешь, что будет потом?
![]() ![]() |
Tribunal |
![]()
Сообщение
#10
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
огромное спасибо!!!
![]() ![]() сейчас со всем разберусь... а идеи насчет площади пятиугольника у вас нет? через определитель длинная формула очень будет) Сообщение отредактировано: Tribunal - 20.11.2006 14:20 -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Цитата а идеи насчет площади пятиугольника у вас нет? Ориентированная площадь вычисляется в 3 строки:double getS() const |
Tribunal |
![]()
Сообщение
#12
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
а я с площадью сама разобралась!=)
но всё равно огромное спасибо за вашу помощь=) -------------------- irreparabilium felix olivio rerum
|
Tribunal |
![]()
Сообщение
#13
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
в этой программе мне нужно задействовать дружественные функции...
не подскажете,как это можно сделать и с какими функциями? правда на этот раз мне нужно работать с треугольником и прямоугольником, а действия призводить над ними:перемещение и проверку пересечения этих фигур. Сообщение отредактировано: Tribunal - 2.12.2006 7:25 -------------------- irreparabilium felix olivio rerum
|
Tribunal |
![]()
Сообщение
#14
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
не могу я понять смысл дружестенных функций...поэтому и не могу реализовать их в программе...=(
помогите ,пожалуйста, разобраться что к чему... -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Дружественная функция?
Как бы объяснить... Ага... Вот так, наверное: если у тебя описан такой класс (это никак не связано с твоей задачей, просто пример): class A { и тебе надо сделать вот такую функцию: int is_equal(const A &first, const A &second) { , то это работать не будет... Потому, что нет у тебя доступа к "x" извне класса, приватные поля доступны только внутри класса, правда? Так вот это ограничение не распространяется на функции - "друзья", такие функции имеют доступ ко всем членам класса, другом которого они являются... Т.е., если сделать: class A {, то здесь уже все будет в пределах правил: доступ из "друга" к приватным полям разрешен... |
Tribunal |
![]()
Сообщение
#16
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
аха...вроде понятно...спасибо большое!=)
а не подскажете,как мне с пересечением справиться(треугольника и прямоугольника)... я уже и не знаю что с ними делать...координаты сравнивать как-то глупо...с уравнениями прямых тоже нельзя работать...как быть? ![]() -------------------- irreparabilium felix olivio rerum
|
Tribunal |
![]()
Сообщение
#17
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
а если использовать этот алгоритм для проверки пересечения в оем случае,как лучше поступить с зданием вешин?
![]() Пересечение выпуклых полигонов -------------------- irreparabilium felix olivio rerum
|
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
Точка - она и в Африке точка, так что будет работать (если запрограммируешь сам алгоритм правильно) и с таким заданием, как это сделано в сообщении №9... Возиожно придется массив точек заменить на список, или какой-то еще другой класс, но желательно, чтобы все вершины были известны уже в базовом классе...
Кстати, прежде, чем прикручивать этот алгоритм к твоей программе, сделай его отдельно (и прогони хотя бы несколько тестов), убедись что все правильно работает, и только потом перекраивай весь проект, а то начнешь, будет работать неверно - подумаешь, что ошиблась при переделке, потеряешь кучу времени, а это в самом алгоритме недочет какой-нибудь... |
Tribunal |
![]()
Сообщение
#19
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
в общем я решила сравнивать координаты максимумов и минимумов в зависимости от положения фигур друг относительно друга....
есть проблемы с ф-ией определения min\max...ругается,что непостоянная ф-ия вызывается для постоянного объкта...как этого избжать? и у меня нет идей,какую ф-ию можно сдлать дружественной... Прикрепленные файлы ![]() -------------------- irreparabilium felix olivio rerum
|
Tribunal |
![]()
Сообщение
#20
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: ![]() ![]() ![]() |
изменила код выше
Сообщение отредактировано: Tribunal - 11.12.2006 20:17 -------------------- irreparabilium felix olivio rerum
|
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 18:10 |