|
0 / 0 / 0
Регистрация: 25.06.2022
Сообщений: 3
|
|
Создать класс Список окон25.06.2022, 15:11. Показов 482. Ответов 5
Здравствуйте, есть довольно большое задание:
Задание 1. Создать класс Прямоугольник, который имеет координаты верхнего левого и нижнего правого угла, цвет фона. 2. Определить конструкторы инициализации, копирования, деструкторы и методы для изменения и чтения значений полей этого класса. 3. Перегрузить операцию ++ для пропорционального увеличения окна, — для уменьшения окна, * для перемещения окна, операцию присвоения объектов =, потоковые операции введения » и выведения « объектов. 4. Создать производный класс - Окно, которое имеет заголовок и рядок меню (массив строк с названиями команд меню). Определить необходимые данные, методы,конструкторы и деструкторы, методы переприсваевание цвета фона, рядка меню,методы или операторные функции ввода и вывода. 5. В приделах иерархии классов построить полиморфичный кластер на основе виртуального метода для чтения цвета фона или рядка меню. Продемонстрировать механизм позднего связывания 6. Разработать класс СПИСОК ОКОн, который включает масиив объектов класса ОКНО. Расположить окна на экране каскадом или плиткой . Увеличить окно до размера экрана. Сделал три пункта и небольшую часть четвертого. Помогите сделать((
0
|
|
| 25.06.2022, 15:11 | |
|
Ответы с готовыми решениями:
5
Создать базовый класс «Список» и класс-потомок «Упорядоченный список» Создать класс Model Window для работы с моделями экранных окон
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 25.06.2022, 15:21 | |||
|
У вас дырочка от нолика. Начните с пункта 1.
0
|
|||
|
0 / 0 / 0
Регистрация: 25.06.2022
Сообщений: 3
|
|
| 25.06.2022, 15:28 [ТС] | |
|
Создал класс прямоугольник
Rectangle.h #pragma once #include "Header.h" class Rectangle { protected: int x1;//Верхній лівий угол int y1;//Нижній правий угол int x2;//Верхній правий угол int y2;//Нижній лівий угол string color; public: void SetX1(int value) { x1 = value; } void SetY1(int value) { y1 = value; } void SetX2(int value) { x2 = value; } void SetY2(int value) { y2 = value; } void SetColor(string value) { color = value; } int GetX1() { return x1; } int GetY1() { return y1; } int GetX2() { return x2; } int GetY2() { return y2; } string GetColor() { return color; } void PrintX1(); void PrintY1(); void PrintX2(); void PrintY2(); void PrintColor(); virtual void PrintInfo()=0; Rectangle(); Rectangle(int a_x1, int a_y1,int a_x2,int a_y2, string a_color) :x1(a_x1), y1(a_y1),x2(a_x2),y2(a_y2), color(a_color) {}; Rectangle(const Rectangle& a); ~Rectangle() // Деструктор { cout << "Вызвался деструктор!(Rectangle)" << endl; }; Rectangle& operator++(); Rectangle& operator--(); Rectangle& operator*(); Rectangle& operator=(const Rectangle& rect); friend ostream& operator<<(ostream& out, const Rectangle& output); friend istream& operator>>(istream& in, Rectangle& input); //friend bool operator==(const Rectangle& rect1, const Rectangle& rect2); }; Rectangle.cpp #include "Rectangle.h" void Rectangle::PrintX1() { cout << "Значення вернього лівого угла прямокутника дорівнює: " << x1 << endl; } void Rectangle::PrintY1() { cout << "Значення нижнього правого угла прямокутника дорівнює: " << y1 << endl; } void Rectangle::PrintX2() { cout << "Значення вернього правого угла прямокутника дорівнює: " << x2 << endl; } void Rectangle::PrintY2() { cout << "Значення нижнього лівого угла прямокутника дорівнює: " << y2 << endl; } void Rectangle::PrintColor() { cout << "Колір фону прямокутника: " << color << endl; } Rectangle::Rectangle() // Конструктор по умолчанию { x1 = 0; y1 = 0; x2 = 0; y2 = 0; color = "Yellow"; } Rectangle::Rectangle(int x1, int y1, int x2, int y2, string color) // Конструктор с параметрами { this->x1 = x1; this->y1 = y1; this->x2 = x2; this->y2 = y2; this->color = color; } Rectangle::Rectangle(const Rectangle& a) { x1 = a.x1; y1 = a.y1; x2 = a.x2; y2 = a.y2; color = a.color; cout << "Конструктор копирования выполнен" << endl; } //void Print() { // cout << "a"; //} Rectangle& Rectangle::operator++() { x1++; y1++; x2++; y2++; return *this; } Rectangle& Rectangle::operator--() { x1--; y1--; x2--; y2--; return *this; } Rectangle& Rectangle::operator*(Rectangle obj) { Rectangle tmp; tmp.x1 = x1 * obj.x1; tmp.y1 = y1 * obj.y1; tmp.x2 = x2 * obj.x2; tmp.y2 = y2 * obj.y2; return tmp; } Rectangle& Rectangle::operator=(const Rectangle& rect) { x1 = rect.x1; y1 = rect.y1; x2 = rect.x2; y2 = rect.y2; color = rect.color; return *this; } ostream& operator<<(ostream& out, const Rectangle& a) { out << "Верхній лівий угол: " << a.x1 << "Нижній правий угол: " << a.y1 << "Верхній правий угол: " << a.x2<< "Нижній лівий угол: "<<a.y2<<"Колір фону: " << a.color << endl; return out; } istream& operator>>(istream& in, Rectangle& b) { cout << "Верхній лівий угол: "; in >> b.x1; cout << "Нижній правий угол: "; in >> b.y1; cout << "Верхній правий угол: "; in >> b.x2; cout << "Нижній лівий угол: "; in >> b.y2; cout << "Колір фону: "; in >> b.color; cout << endl; return in; } Это вот первые три пункта
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||||||||||||
| 25.06.2022, 16:11 | ||||||||||||
|
Большое количество ошибок.
Но остановимся на логических. У вас Прямоугольник - абстрактный класс, что неверно по поставленной задаче, уберите из него чисто виртуальные методы.
И как этот оператор должен работать ? То есть. Осуществить перемещение к какой то точке.
Перепишите оператор *. Пока я просматриваю/правлю остальное.
0
|
||||||||||||
|
0 / 0 / 0
Регистрация: 25.06.2022
Сообщений: 3
|
|
| 25.06.2022, 16:39 [ТС] | |
|
Хорошо переделаю оператор. Я искал подобные задачи и нашел ее. Я просто многого не знаю с того что надо сделать и я делаю свою программу по этой программе но она не правильно работает.
#include<iostream> #include<cstring> #include<string> #include<conio.h> #include<fstream> #include<stdio.h> #include<stdlib.h> #include<queue> #include <algorithm> #include<locale> #include<ctime> #include<Windows.h> #include<string.h> #include<stdlib.h> #pragma warning (disable: 4996) using namespace std; class ramka { protected: int x1, y1, x2, y2; //координаты рамки int color;//цвет рамки public: //конструктор ramka(int x1, int y1, int x2, int y2, int color) { this->x1 = x1; this->y1 = y1; this->x2 = x2; this->y2 = y2; this->color = color; } virtual void cvetvibor(int x) { char s[10], st[20] = "color "; itoa(x, s, 10); strcat(st, s); system(st); //cout << "Выберети цвет" << endl; }; ramka() { x1 = 0; y1 = 0; x2 = 0; y2 = 0; color = 0; }; //конструктор копирования ramka(ramka& r) { x1 = r.x1; y1 = r.y1; x2 = r.x2; y2 = r.y2; color = r.color; } //операция введения в поток ostream& operator<<(ostream& os) { os << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << ' ' << color << endl; return os; } //операция вывода из потока istream& operator>>(istream& is) { is >> x1 >> y1 >> x2 >> y2 >> color; return is; } //операция ++ ramka& operator++() { x2++; y2++; return *this; } //операция -- ramka& operator --() { x2--; y2--; return *this; } // Перезарузка оператора присвоения "=". ramka& operator = (ramka& obj) { x1 = obj.x1; y1 = obj.y1; x2 = obj.x2; y2 = obj.y2; color = obj.color; return *this; } // Перезагрузка бинарного оператора умножения "*" ramka operator * (ramka obj) { ramka tmp; tmp.x1 = x1 * obj.x1; tmp.y1 = y1 * obj.y1; tmp.x2 = x2 * obj.x2; tmp.y2 = y2 * obj.y2; return tmp; } }; //Класс меню class Menu { protected: int count; //количество команд int active; //номер активной команды char** command; //название команды public: //конструктор Menu(int count, int active, char** command) { this->count = count; this->active = active; this->command = new char* [count]; for (int i = 0; i < count; i++) { this->command[i] = new char[20]; strcpy_s(this->command[i], 20, command[i]); } } Menu() { count = 0; active = 0; command = NULL; }; //конструктор копирования Menu(Menu& m) { count = m.count; active = m.active; command = new char* [m.count]; for (int i = 0; i < count; i++) { command[i] = new char[20]; strcpy_s(command[i], 20, m.command[i]); } } //деструктор ~Menu() { for (int i = 0; i < count; i++) delete[]command[i]; } //операция введения с потока friend istream& operator>>(istream& is, Menu& m) { for (int i = 0; i < m.count; i++) is >> m.command[i]; return is; } //операция вывода из потока friend ostream& operator<<(ostream& os, Menu& m) { for (int i = 0; i < m.count; i++) os << m.command[i] << endl; return os; } }; //Класс окна class Window : public ramka, public Menu { protected: char* title; //Заголовок public: //конструктор Window(char* title, ramka r, Menu m) : ramka(r), Menu(m) { this->title = new char[100]; strcpy_s(this->title, 100, title); } //конструктор копирования Window(const Window& w) { //ramka x1 = w.x1; y1 = w.y1; x2 = w.x2; y2 = w.y2; color = w.color; //Menu count = w.count; active = w.active; command = new char* [w.count]; for (int i = 0; i < count; i++) { command[i] = new char[20]; strcpy_s(command[i], 20, w.command[i]); } //Window title = w.title; } //деструктор ~Window() { delete[] title; } Window() :ramka(), Menu() { title = NULL; } //операция введения из потока friend istream& operator>>(istream& is, Window& w) { is >> w.x1 >> w.y1 >> w.x2 >> w.y2; for (int i = 0; i < w.count; i++) is >> w.command[i]; is >> w.title; return is; } //операция вывода из потка friend ostream& operator<<(ostream& os, Window& w) { os << w.title << ' '; os << w; os << w; return os; } void set() { cin.ignore(); }; char* getname() { return title; }; Window set(ifstream& f) { char str[100] = ""; char* ptr; f.getline(title, 50); ptr = strtok(str, "\t"); if (ptr) strcpy(title, ptr); ptr = strtok(str, NULL); if (ptr) cvetvibor(atoi(ptr)); return Window(); } void print(ofstream& f) { f << title << '\n'; } void print() { //printf("\t%-25s%-11s% 8s", title); Window(); } }; class Queue { protected: queue<Window> q; public: void Print(); void Load(); void Save(); void Add(); void Edit(); void Del(); void Find(); }; void Queue::Print() { //queue <osoba>::iterator it; int i = 0; cout << "# Окно\n"; cout << "-------------------------------------------------------------------\n"; //it=os.begin(); int n = q.size(); queue <Window> t = q; while (!t.empty()) { cout << ++i; t.front().print(); t.pop(); } } void Queue::Load() { char sn[5] = ""; int n = 0; Window dd; ifstream fi("text.txt", ios::in); fi.getline(sn, 5); n = atoi(sn); for (int i = 0; i < n; i++) { dd.set(fi); q.push(dd); } } void Queue::Save() { ofstream f("text.txt", ios::out); //ff.close(); f << q.size() << '\n'; queue<Window> t = q; while (!t.empty()) { t.front().print(f); t.pop(); } f.close(); } void Queue::Add()//vector <osoba> &os) { Window dd; dd.set(); q.push(dd); } void Queue::Edit()// { int i = 0, n; Print(); cout << "Введите номер редактируемоо элемента > "; cin >> n; if (n < 1 || n > q.size()) { fprintf(stderr, "Элемент с номером %d не существует\n", n); return; } n--; queue<Window> f, f2; Window dd; while (i < n) { f.push(q.front()); q.pop(); i++; //f.back().print(); } dd = q.front(); q.pop(); dd.set(); while (!q.empty()) { f2.push(q.front()); q.pop(); } while (!f.empty()) { q.push(f.front()); f.pop(); } q.push(dd); while (!f2.empty()) { q.push(f2.front()); f2.pop(); } } void Queue: el()//vector <osoba> &os){ int i = 0, n; Print(); cout << "Введите номер удаляемоо элемента > "; cin >> n; if (n < 1 || n > q.size()) { fprintf(stderr, "Элемент с номером %d не существует\n", n); return; } n--; queue<Window> f, f2; while (i < n) { f.push(q.front()); q.pop(); i++; //f.back().print(); } q.pop(); while (!q.empty()) { f2.push(q.front()); q.pop(); } while (!f.empty()) { q.push(f.front()); f.pop(); } while (!f2.empty()) { q.push(f2.front()); f2.pop(); } } void Queue::Find() { int i = 0; char str[50]; Print(); cout << "Введите Фамилию> "; cin >> str; queue<Window> f = q; while (!f.empty()) { if (strstr(f.front().getname(), str)) { f.front().print(); i++; } f.pop(); if (i == 0) cout << "Нет записей удовлетворяющих условие!" << endl; } } int men(void) { int c = 0; struct tm* t; time_t ltime; time(<ime); t = localtime(<ime); cout << '\n' << t->tm_mday << '/' << t->tm_mon + 1 << '/' << 1990 + t->tm_year << endl; while ((c < '0' || c >9) && c != 21) { printf("\n>>>>>Menu<<<<<\n"); printf("----------------\n"); printf("[0] - Exit\n[1] - Add\n[2] - Save\n[3] - Load\n[4] - Print\n[5] - Find\n[6] - Del\n[7] - Edit\n"); printf("----------------\n"); printf("---->"); c = getch(); printf("%c\n", c); } return c; } void main() { Queue os; int k; setlocale(LC_ALL, "Russian"); char command[][6] = { "Add", "Save", "Load", "Print", "Find", "Del","Edit" }; while ((k = men()) != 0 && k != 20) { switch (k) { case'1': os.Add(); break; case'2': os.Save(); break; case'3': os.Load(); break; case'4': os.Print(); break; case'5': os.Find(); break; case'6': os.Del(); break; case'7': os.Edit(); break; } } /*ramka f(1, 1, 80, 25, 2); cout << "Склад объекта ramka\n" << f; Menu m(7, 0, command); cout << "Склад объекта Menu\n" << m; Window w("MyWindow", f, m); cout << w << endl;*/ system("pause"); }
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||||
| 25.06.2022, 17:23 | ||||
|
Jitel_XNURE, не нужно весь код каждый раз выкладывать!
Только те части что добавились / изменились. К тому же такое наследование, какое то бессмысленное. Прямоугольник и это Окно, абсолютно не связные сущности. Зачем их исскуственно связывать наследованием, мне не понятно. 5. Чем дальше тем жирнее партизаны. И тем хуже я понимаю их смысл. Тут вообще не понял, от слова ничего. Ни про "виртуальный кластер", ни то как разные методы присущие только одному из класа, должны быть виртуальными для иерархии.... 6, Это вообще визуальное построение. Каким образом его осуществлять в консоли ? Добавлено через 11 минут Создайте структуру Point. Вернемся к оператору*. Тогда можно будет перегрузить оператор* со структурой Point. И спокойно "переместить окно". Придется переделать все на Point. Задание "веселое".
0
|
||||
| 25.06.2022, 17:23 | |
|
Помогаю со студенческими работами здесь
6
Создать класс «Квартира», в котором список комнат реализовать как односвязный список Класс "Список окон" Создать базовый класс список Создать базовый класс список Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|