Здравствуйте! Такая проблема, в дочернем классе неправильно подсчитывает площадь между прямоугольником и кругом. `
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
class Rect
{
public:
double x0, y0, x1, y1, x2, y2;
double a();
double b();
double Area();
void Input()
{
cout << "Coordinates x1 = ";
cin >> x1;
cout << "Coordinates y1 = ";
cin >> y1;
cout << "Coordinates x2 = ";
cin >> x2;
cout << "Coordinates y2 = ";
cin >> y2;
cout << "\n";
}
};
double Rect::a()
{
double a=(x2 - x1);
return a;
}
double Rect::b()
{
double b =(y2 - y1);
return b;
}
double Rect::Area()
{
double S = a() * b();
return S;
}
class Circle : public Rect
{
public:
double r;
double Area()
{
double s = 3.14 * r;
return s;
}
double MidPoint()
{
double x0 = a() / 2;
double y0 = b() / 2;
if (a() <= b())
double r = a() / 2;
else double r = b() / 2;
return r;
}
double Information()
{
double S = (x2 - x1) * (y2 - y1);;
double s = 3.14 * r;
s = S - s;
cout << "Area: \n Area s: " << s << endl;
return s;
}
};
void main()
{
HWND handle = FindWindow("ConsoleWindowClass", NULL);
HWND hDC = (HWND)GetDC(handle);
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
Rect A;
A.Input();
if ((A.a() < 0) || (A.b() < 0))
cout << "The side of the rectangle is entered incorrectly." << "\n";
else
{
system("cls");
HWND hWnd = GetConsoleWindow();
HDC hDC = GetDC(hWnd);
SelectObject(hDC, GetStockObject(WHITE_PEN));
Circle B;
B.x0 = A.a()/2;
B.y0 = A.b()/2;
B.Information();
Rectangle(hDC, A.x1, A.y1, A.x2, A.y2);
SelectObject(hDC, GetStockObject(BLACK_PEN));
if (A.a() < A.b())
Ellipse(hDC, A.x1 , A.y1+ (A.x2-A.x1)/2, A.x2 , A.y1+A.x2-A.x1+(A.x2 - A.x1)/ 2);
else Ellipse(hDC, A.x1+(A.y2 - A.y1)/2, A.y1, A.x1 + A.y2-A.y1+(A.y2 - A.y1)/2, A.y2);
_getch();
system("cls");
cout << "Click to exit." << "\n";
}
_getch();
}
` Рисует правильно, а подсчет площади нет. Не знаю как исправить. Ищу площадь между кругом и прямоугольником.
В дополнение к формуле площади круга.
Уберите double
перед r
в MidPoint
. Вы декларируете локальную переменную, которая перекрывает член класса.
double MidPoint()
{
double x0 = a() / 2;
double y0 = b() / 2;
if (a() <= b())
r = a() / 2;
else
r = b() / 2;
return r;
}
Наследование круга от прямоугольника - это чистый дзэн.
В классе Circle
в методах
double Area()
{
double s = 3.14 * r;
return s;
}
и
double Information()
{
double S = (x2 - x1) * (y2 - y1);;
double s = 3.14 * r;
s = S - s;
cout << "Area: \n Area s: " << s << endl;
return s;
}
ошибка - в обоих нужно изменить
double s = 3.14 * r;
на
double s = 3.14 * r * r;
Между прочим, метод
double MidPoint()
{
double x0 = a() / 2;
double y0 = b() / 2;
if (a() <= b())
double r = a() / 2;
else double r = b() / 2;
return r;
}
нужно перенести до класса Rect
, и методы
double Rect::a()
{
double a=(x2 - x1);
return a;
}
и
double Rect::b()
{
double b =(y2 - y1);
return b;
}
исправить, чтобы они возвращали абсолютные величины - например так:
double Rect::a()
{
return (x2 - x1) > 0 ? (x2 - x1) : (x1 - x2);
}
double Rect::b()
{
return (y2 - y1) > 0 ? (y2 - y1) : (y1 - y2);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
При старте приложения в 80% случаев происходит лаг на 5-10 секунд если в приложении используется сеть (QNetworkAccessManager)
Вопрос касается C++11, использования auto в подобной структуре:
Разработать класс реализующий список (однонаправленное кольцо)Элемент списка содержит информацию о товаре на складе фирмы
Реально ли для объектов этого класса использовать перегрузку оператора + (суммы?) и как это сделать? и имеет ли смысл?