Тема: Класи + Одинарне успадкування
Підкажіть як пофіксити помилку(а саме в Rectangle* tri = new Rectangle(a);) та чомусь виводить не правильний розрахунок хоча формули првильні.
Код:
#include<iostream>
#include<windows.h>
#include<math.h>
using namespace std;
class Shape2D
{
public:
Shape2D();
virtual ~Shape2D();
virtual float Area() = 0;
virtual float Perimeter() = 0;
virtual void PrintMessage();
};
Shape2D::Shape2D()
{
cout << "Конструктор 2D Форма" << endl;
}
Shape2D::~Shape2D()
{
cout << "Деструктор 2D Форма" << endl;
}
void Shape2D::PrintMessage()
{
cout << " Це 2D Форма";
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Triangle : public Shape2D
{
private:
float S,P,p,r1, r2,r3;
public:
~Triangle();
Triangle(float = 0);
float Perimeter();
float Area();
void PrintMessage();
};
Triangle::Triangle(float rs) : r1(rs) , r2(rs), r3(rs)
{}
Triangle::~Triangle()
{}
float Triangle::Perimeter()
{
P = r1 + r2 + r3;
return P;
}
float Triangle::Area()
{
p = (r1 + r2 + r3)/2;
S=sqrt(p * (p - r1) * (p - r2) * (p - r3));
return S;
}
void Triangle::PrintMessage()
{
cout << "Тип фігури - Трикутник" << endl;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Rectangle : public Shape2D
{
private:
float P,S, s1,s2;
public:
~Rectangle();
Rectangle(float = 0);
float Perimeter();
float Area();
void PrintMessage();
};
Rectangle::Rectangle(float st) : s1(st),s2(st)
{}
Rectangle::~Rectangle()
{
cout << "Прямокутник-деструктор " << endl;
}
float Rectangle::Perimeter()
{
P = 2 * (s1 + s2);
return P ;
}
float Rectangle::Area()
{
S = s1 * s2;
return S;
}
void Rectangle::PrintMessage()
{
cout << "Тип фігури - Прямокутник";
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
float a;
int i;
while (1)
{
cout << endl << "Меню: " << endl
<< "1-Прямокутник" << endl
<< "2-Трикутник" << endl
<< "3-Вихiд:" << endl;
cin >> i;
switch (i)
{
case 1:
{
cout << "Прямокутник:" << endl;
cout << "Введiть довжину ребра куба:" << endl;
cin >> a;
cin >> a;
cin >> a;
Rectangle* tri = new Rectangle(a);
cout << "Площа:" << tri->Area() << endl << "Периметер:" << tri->Perimeter() << endl;
tri->PrintMessage();
delete tri;
break;
}
case 2:
{
cout << "Трикутник:" << endl;
cout << "Введiть сторони трикутника:" << endl;
cin >> a;
cin >> a;
cin >> a;
Triangle* rec = new Triangle(a);
cout << endl << "Площа : " << rec->Area() << endl << "Периметер: " << rec->Perimeter() << endl;
rec->PrintMessage();
delete rec;
break;
}
case 3:
return 0;
}
}
return 0;
}
Компілятор видає помилку : E0020 індифікатор "tri" не определен та
E0079 Потрібний специфікатор типа (Rectangle(a); )