pascal
Главная | Каталог статей | Регистрация | Вход
Понедельник
21.07.2025
05:52
Приветствую Вас Гость | RSS
Главная » Статьи » C » Полезно

C++. Массив различных элементов с общим родителем.


#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;
}

Категория: Полезно | Добавил: cccc1808 (12.12.2016)
Просмотров: 194 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Вход на сайт
Поиск
Copyright MyCorp © 2025
Бесплатный хостинг uCoz