Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 25.06.2022
Сообщений: 3

Создать класс Список окон

25.06.2022, 15:11. Показов 482. Ответов 5

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть довольно большое задание:

Задание

1. Создать класс Прямоугольник, который имеет координаты верхнего левого и нижнего правого угла, цвет фона.

2. Определить конструкторы инициализации, копирования, деструкторы и методы для изменения и чтения значений полей этого класса.

3. Перегрузить операцию ++ для пропорционального увеличения окна, — для уменьшения окна, * для

перемещения окна, операцию присвоения объектов =, потоковые операции введения » и выведения « объектов.

4. Создать производный класс - Окно, которое имеет заголовок и рядок меню (массив строк с названиями команд меню).

Определить необходимые данные, методы,конструкторы и деструкторы, методы переприсваевание цвета фона, рядка меню,методы или операторные функции ввода и вывода.

5. В приделах иерархии классов построить полиморфичный кластер на основе виртуального метода для чтения цвета фона или рядка меню. Продемонстрировать механизм позднего связывания

6. Разработать класс СПИСОК ОКОн, который включает масиив объектов класса ОКНО. Расположить окна на экране каскадом или плиткой . Увеличить окно до размера экрана.

Сделал три пункта и небольшую часть четвертого. Помогите сделать((
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.06.2022, 15:11
Ответы с готовыми решениями:

Создать базовый класс «Список» и класс-потомок «Упорядоченный список»
Создать базовый класс «список», определив в нем функции добавления в начало списка, удаления N-го элемента списка, вывода элементов списка...

Создать класс Model Window для работы с моделями экранных окон
Помогите написать программу...Создать класс Model Window для работы с моделями экранных окон. В качестве полей задаются: заголовок окна,...

Создать класс Элемент списка (Node), а затем класс Список (List)
Задание: Создать класс Элемент списка (Node), а затем класс Список (List). В зависимости от варианта список должен быть одно или...

5
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.06.2022, 15:21
Цитата Сообщение от Jitel_XNURE Посмотреть сообщение
Здравствуйте, есть довольно большое задание:
Привет. Хорошо что есть.

Цитата Сообщение от Jitel_XNURE Посмотреть сообщение
Помогите сделать((
Допустим. С чем помогать?
У вас дырочка от нолика.

Начните с пункта 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
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.06.2022, 16:11
Большое количество ошибок.
Но остановимся на логических.
У вас Прямоугольник - абстрактный класс, что неверно по поставленной задаче, уберите из него чисто виртуальные методы.

C++
1
Rectangle& Rectangle::operator*(Rectangle obj);
Возвращать ссылку на локальный объект нельзя = высячая ссылка.
И как этот оператор должен работать ?

Цитата Сообщение от Jitel_XNURE Посмотреть сообщение
* для перемещения окна
Перемещение окна - изменение его начала координат, с сохранением размера.
То есть. Осуществить перемещение к какой то точке.
C++
1
Rectangle& Rectangle::operator*(int x, int y);
Возвращаем ссылку на самого себя.

Перепишите оператор *. Пока я просматриваю/правлю остальное.
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(&ltime);
t = localtime(&ltime);
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
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.06.2022, 17:23
Jitel_XNURE, не нужно весь код каждый раз выкладывать!
Только те части что добавились / изменились.

Цитата Сообщение от Jitel_XNURE Посмотреть сообщение
4. Создать производный класс - Окно
Тут все понятно. С массивом будет много возни. Стоит использовать std::vector
К тому же такое наследование, какое то бессмысленное.
Прямоугольник и это Окно, абсолютно не связные сущности. Зачем их исскуственно связывать наследованием, мне не понятно.

5.
Чем дальше тем жирнее партизаны. И тем хуже я понимаю их смысл.
Тут вообще не понял, от слова ничего.
Ни про "виртуальный кластер", ни то как разные методы присущие только одному из класа, должны быть виртуальными для иерархии....

6,
Это вообще визуальное построение. Каким образом его осуществлять в консоли ?

Добавлено через 11 минут
Цитата Сообщение от Jitel_XNURE Посмотреть сообщение
Я искал подобные задачи и нашел ее
Цитата Сообщение от Jitel_XNURE Посмотреть сообщение
и я делаю свою программу по этой программе
Так вы никуда не дойдете. Берите и пишите все с нуля. Хотя бы из того что уже скопировали и показали мне.

Создайте структуру Point.
Вернемся к оператору*.
Тогда можно будет перегрузить оператор* со структурой Point.
И спокойно "переместить окно".
Придется переделать все на Point.
Задание "веселое".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.06.2022, 17:23
Помогаю со студенческими работами здесь

Создать класс СПИСОК целых чисел. Разработать класс СТЕК
&quot;Создать класс СПИСОК целых чисел. Разработать класс СТЕК, который вмещает объект класса СПИСОК. Определить необходимые конструкторы,...

Создать класс «Квартира», в котором список комнат реализовать как односвязный список
Добрый день,написал фот такой клас по заданию:Создать класс «Квартира», в котором список комнат реализовать как односвязный список....

Класс "Список окон"
Здравствуйте, есть довольно большое задание, код которого почти полностью представлен ниже: Задание 1. Создать класс...

Создать базовый класс список
Создать базовый класс список. Реализовать на базе списка стек и очередь с виртуальными функциями вставки и вытаскивания нашел такой код,...

Создать базовый класс список
Помогите....нужно написать проги(ТЕМА НАСЛЕДОВАНИЯ)...Непонял задания...если кто прочтает и поймет что нужно сделать то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
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. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru