Всем привет,делаю работу по выводу фигур в консоли на C++ Трапецию нарисовал(думал что она труднее чем окружность) но окружность с моими параметрами не выводится(я думаю дело в моем конструкторе Circle.Хз даже,потому что если захардкодить(поставить интовые значения вместо задаваемых параметров) то все норм выводится Figure.h #pragma once #include <iostream> #include <windows.h> #include<windowsx.h> using namespace std; const int NotUsed = system("color F0");// цвет фона окна class Figure {// базовый класс public: Figure() : x0(0), y0(0), R(0){}; Figure(int _x0, int _y0, int _R, COLORREF _background, COLORREF _border) : x0(_x0), y0(_y0), R(_R), background(_background), border(_border) { hwnd = GetConsoleWindow(); hdc = GetDC(hwnd); GetClientRect(hwnd, &rt); } virtual void show(); virtual void hide(); virtual void move(int, int); ~Figure() { ReleaseDC(hwnd, hdc); }; protected: int x0, y0; int R; HWND hwnd; HDC hdc; RECT rt; COLORREF background; COLORREF border; }; C #pragma once #include <iostream> #include <windows.h> #include<windowsx.h> using namespace std; const int NotUsed = system("color F0");// цвет фона окна class Figure {// базовый класс public: Figure() : x0(0), y0(0), R(0){}; Figure(int _x0, int _y0, int _R, COLORREF _background, COLORREF _border) : x0(_x0), y0(_y0), R(_R), background(_background), border(_border) { hwnd = GetConsoleWindow(); hdc = GetDC(hwnd); GetClientRect(hwnd, &rt); } virtual void show(); virtual void hide(); virtual void move(int, int); ~Figure() { ReleaseDC(hwnd, hdc); }; protected: int x0, y0; int R; HWND hwnd; HDC hdc; RECT rt; COLORREF background; COLORREF border; }; Figure.cpp #include"Figure.h" void Figure::show() {} void Figure::hide() {} void Figure::move(int, int) {} C #include"Figure.h" void Figure::show() {} void Figure::hide() {} void Figure::move(int, int) {} Circle.h #include "Figure.h" class Circle :public Figure { private: int x0, y0; int R; public: Circle(int new_x0, int new_y0, int new_R, COLORREF new_bkgrnd, COLORREF new_border) : Figure(new_x0, new_y0, new_R, new_bkgrnd, new_border) {}; void show() override; }; C #include "Figure.h" class Circle :public Figure { private: int x0, y0; int R; public: Circle(int new_x0, int new_y0, int new_R, COLORREF new_bkgrnd, COLORREF new_border) : Figure(new_x0, new_y0, new_R, new_bkgrnd, new_border) {}; void show() override; }; Circle.cpp #include "Figure.h" #include "Circle.h" void Circle::show() { HPEN pen = CreatePen(PS_SOLID, 2,border); HBRUSH brush = CreateSolidBrush(background); SelectObject(hdc, pen); SelectObject(hdc, brush); Ellipse(hdc,x0-R,y0+R,x0+R,y0-R); DeleteObject(pen); DeleteObject(brush); DeletePen(pen); DeleteBrush(brush); ReleaseDC(hwnd, hdc); } C #include "Figure.h" #include "Circle.h" void Circle::show() { HPEN pen = CreatePen(PS_SOLID, 2,border); HBRUSH brush = CreateSolidBrush(background); SelectObject(hdc, pen); SelectObject(hdc, brush); Ellipse(hdc,x0-R,y0+R,x0+R,y0-R); DeleteObject(pen); DeleteObject(brush); DeletePen(pen); DeleteBrush(brush); ReleaseDC(hwnd, hdc); } main.cpp #include "Figure.h" #include "Trapezium.h" #include "Circle.h" #include "Dyn.h" int main() { SetConsoleTitle((LPCWSTR)L"23VP2_2"); Dyn d1{ new Circle(100,100,400,RGB(0,89,24),RGB(65,0,8))}; d1.show(); Sleep(3600); return 0; } C #include "Figure.h" #include "Trapezium.h" #include "Circle.h" #include "Dyn.h" int main() { SetConsoleTitle((LPCWSTR)L"23VP2_2"); Dyn d1{ new Circle(100,100,400,RGB(0,89,24),RGB(65,0,8))}; d1.show(); Sleep(3600); return 0; }
God_likeGL, проблема, с которой столкнулся egorikkfn, может быть связана с тем, что в классе `Circle` он повторно объявил переменные `x0`, `y0` и `R`, которые уже были объявлены в базовом классе `Figure`. Это приводит к тому, что в методе `show()` класса `Circle` используются неинициализированные локальные переменные `x0`, `y0` и `R`, а не те, которые передаются в конструктор `Figure`. Чтобы исправить эту ошибку, egorikkfn должен удалить объявления переменных `x0`, `y0` и `R` из класса `Circle`, так как они уже наследуются от класса `Figure`. Вот исправленная версия заголовочного файла `Circle.h`: #include "Figure.h" class Circle : public Figure { public: Circle(int new_x0, int new_y0, int new_R, COLORREF new_bkgrnd, COLORREF new_border) : Figure(new_x0, new_y0, new_R, new_bkgrnd, new_border) {}; void show() override; }; C #include "Figure.h" class Circle : public Figure { public: Circle(int new_x0, int new_y0, int new_R, COLORREF new_bkgrnd, COLORREF new_border) : Figure(new_x0, new_y0, new_R, new_bkgrnd, new_border) {}; void show() override; }; Также стоит убедиться, что метод `show()` в классе `Circle` корректно рисует окружность. В текущей реализации есть небольшая ошибка в вызове функции `Ellipse()`. Параметры должны быть переданы так, чтобы они правильно задавали координаты левого верхнего и правого нижнего углов прямоугольника, в который вписана окружность: void Circle::show() { HPEN pen = CreatePen(PS_SOLID, 2, border); HBRUSH brush = CreateSolidBrush(background); SelectObject(hdc, pen); SelectObject(hdc, brush); Ellipse(hdc, x0 - R, y0 - R, x0 + R, y0 + R); DeleteObject(pen); DeleteObject(brush); } C void Circle::show() { HPEN pen = CreatePen(PS_SOLID, 2, border); HBRUSH brush = CreateSolidBrush(background); SelectObject(hdc, pen); SelectObject(hdc, brush); Ellipse(hdc, x0 - R, y0 - R, x0 + R, y0 + R); DeleteObject(pen); DeleteObject(brush); } Эти изменения должны помочь egorikkfn корректно отобразить окружность в консоли.
"Dyn.h" это динамический массив ,там все хорошо,тк трапецию он выводит --- Сообщение объединено с предыдущим 14 май 2024 бля это я ебанат,у меня члены класса с одинаковыми именами наследовались от Figure.