1.4

#include <iostream>
#include <typeinfo>
#include <cstdlib>
using namespace std;
class figure {
protected:
	double x, y;
public:
	figure(double i, double j) {
		x = i;
		y = j;
	}
	virtual double area() = 0;
};
class triangle : public figure {
public:
	triangle(double i, double j) : figure(i, j) {}
	double area() {
		return x * 0.5 * y;
	}
};
class rectangle : public figure {
public:
	rectangle(double i, double j) : figure(i, j) {}
	double area() { return x * y; }
};
class circle : public figure {
public:
	circle(double i, double j = 0) : figure(i, j) {}
	double area() { return 3.14 * x * x; }
};
// figure sinf obyektlarini yaratish.
figure* factory() {
	switch (rand() % 3) {
	case 0: return new circle(rand() % 15);
	case 1: return new triangle(rand() % 15, rand() % 15);
	case 2: return new rectangle(rand() % 15, rand() % 15);
	}
	return 0;
};
int main() {
	figure* p; // asos sinfga koʻrsatkich
	int i;
	int t = 0, r = 0, c = 0;
	// 5 ta obyektlarni hosil qilsh va sanash
	for (i = 0; i < 15; i  ) {
		p = factory(); // obyektni hosil qilish
		cout << "Obyektning tipi: " << typeid(*p).name();
		cout << ". ";
		// obyektni tekshirish orqali sanasi
		if (typeid(*p) == typeid(triangle)) t  ;
		if (typeid(*p) == typeid(rectangle)) r  ;
		if (typeid(*p) == typeid(circle)) c  ;
		// Yuzasini hisoblash
		cout << " S= " << p->area() << endl;
	}
	cout << endl;
	cout << "Quyidagi obyektlar hosil qilindi:\n";
	cout << " Uchburchaklar: " << t << endl;
	cout << " Toʻrtburchaklar: " << r << endl;
	cout << " Doiralar: " << c << endl;
	system("pause");
	return 0;
}
Run on cpp.sh