Тема: Масив вказівників на базовий шаблонний клас
"У головній функції створити масив M=10 вказівників на базовий клас А, які ініціалізуються адресою об’єкта одного із похідних класів. "
По факту потрібно цей довгий код ініціалізації вказівників(див. внизу) запхати в цикл і зробити змінні a1, a2 .... елементами масиву. Проблема в тому що я не знаю як створити масив взазівників які вказують на різний тип даних.
Типу:
A<??>* mas[10];
Компілятор gcc 7.3.0
Ось код:
#include <iostream>
#include <typeinfo>
#include <ctime>
using namespace std;
template <class T>
class A {
private:
T X;
public:
virtual T Get() {
return X;
}
};
class B : public A<int> {
private:
int I;
public:
B () {
I = 0;
}
int Get() {
return I;
}
};
class C : public A<float> {
private:
float F;
public:
C () {
F = 0.1;
}
float Get() {
return F;
}
};
class D : public A<char> {
private:
char H;
public:
D () {
H = '0';
}
char Get() {
return H;
}
};
int main() {
const int M = 10;
srand(time(NULL));
B* b1 = new B;
A<int>* a1;
a1 = b1;
D* d2 = new D;
A<char>* a2;
a2 = d2;
C* c3 = new C;
A<float>* a3;
a3 = c3;
D* d4 = new D;
A<char>* a4;
a4 = d4;
B* b5 = new B;
A<int>* a5;
a5 = b5;
C* c6 = new C;
A<float>* a6;
a6 = c6;
C* c7 = new C;
A<float>* a7;
a7 = c7;
D* d8 = new D;
A<char>* a8;
a8 = d8;
B* b9 = new B;
A<int>* a9;
a9 = b9;
C* c10 = new C;
A<float>* a10;
a10 = c10;
}
P. S. Повне завдання якщо треба:
На вершині ієрархії знаходиться базовий шаблонний клас
template <class T> class А;
який у захищеній частині містить оголошення значення X типу Т, а у відкритій
частині – віртуальний метод Get() отримання цього значення.
Визначити N > 2 похідних класів з власними даними та методами, які утворюють поліморфічний
кластер на основі класу А.
У головній функції створити масив M=10 вказівників
на базовий клас А, які ініціалізуються адресою об’єкта одного із похідних
класів.
Тип створюваного об’єкта вибирається випадково з ієрархії класів (на
основі вбудованого генератора цілих випадкових величин з діапазону [0, N1]).
На основі механізму ідентифікації типів (клас type_info) визначити
назву класу, на який вказує кожен із елементів масиву вказівників.
Використати масив вказівників для виклику віртуальних методів