#include <iostream>;
#include <vector>
using namespace std;
// базовый класс
class B
{
public: int a;
};
// наследник 1
class D1 : public B {
public : int b;
};
// наследник 2
class D2 : public B {
public : int c;
};
int main()
{
D1 d1;
D2 d2;
d1.b = 3;
//Массив указателей на базовый класс B
B **ar = new B*[2];
//Вектор Указателей
vector <B*> vec;
//Запись в массив
ar[0] = &d1;
ar[1] = &d2;
//Обращение к элементу как к D1
cout << ((D1*)ar[0])->b << endl;
//Запись в вектор
vec.push_back(&d1);
vec.push_back(&d2);
//Обращение к элементу как к D1
cout << ((D1*)vec[0])->b;
//Копирование вектора
//(Копируеются указатели на элементы, не создаются новые экземпляры)
vector <B*> vec2 = vec;
//Меняем значение значение в элементе по указателю из 1 вектора
cout << "vec2[0] = " << ((D1*)vec2[0])->b << endl;
((D1*)vec[0])->b = 5;
//При этом меняется указатель из второго вектора указывает на тот же объект
cout << "vec2[0] = " << ((D1*)vec2[0])->b << endl;
system("pause");
return 0;
}
|