У меня есть 4 класса(4 фигуры), но в зависимости от входных данных, экземпляр создается только для одного класса.
Я хочу объявить, что будет объект класса заранее, до того, как обработаю входные данные( стороны а и b и угол x между ними). То есть в момент объявления я не знаю, какой конкретно класс будет реализовываться.
Поэтому я объявляю указатель на абстрактный класс Obj, чтобы потом когда станет ясно, какого класса будет создан экземпляр, присвоить этому адресу ссылку на сам экземпляр. Я знаю, что можно указатель на базовый класс может принимать ссылку на класс потомок, но как в этой конкретной ситуации передать ссылку, я не знаю
#include <string>
#include <iostream>
using namespace std;
class Obj
{
public:
virtual void Introduce() = 0;
};
class Romb : Obj
{
public:
void Introduce() override
{
cout << " Это ромб!\n";
}
};
class Kvadrat : Obj
{
public:
void Introduce() override
{
cout << " Это квадрат!\n";
}
};
class Prmugolnik : Obj
{
public:
void Introduce() override
{
cout << " Это прямоугольник!\n";
}
};
class Parallelogram : Obj
{
public:
void Introduce() override
{
cout << " Это параллелограмм!\n";
}
};
int main()
{
short a, b;
float x;
Obj *object;
cout << " Сторона A = ";
cin >> a;
cout << " Сторона B = ";
cin >> b;
cout << " Угол X = ";
cin >> x;
if (x == 90)
{
if (a == b)
{
Kvadrat kv;
object = kv;
}
else
{
Prmugolnik prgl;
}
}
else
{
if (a == b)
{
Romb rmb;
}
else
{
Parallelogram prlgm;
}
}
}