E
eugira
Как в массиве или коллекции хранить экземпляры классов?
Очень часто есть необходимость создания множества экземпляров классов (заранее неизвестно сколько). И для обращения к методам и свойствам любого экземпляра их хранить либо в динамическом массиве либо в коллекции.
Проблема в том, что в C++ нет оператора аналогичного Redim в VB
Если в среде NET будь то VB NET или C++ есть коллекция ArrayList
Пишешь на VB без проблем
Dim coll As New ArrayList, w As Book 'экземпляр класса Book
For i = 0 To n
Dim w As New Служаший(nm(i), i+100)
coll.Add(w)
next i
coll(3).Оклад(); //далее без проблем у любого элемента коллекции вызываешь метод класса
//несм на то что это элем коллекции , он автом преобразуется к типу класса
На С++ подобное у меня вызывает ряд проблем
1)во первых если пишем в NET то, слава богу есть ArrayList (в С++ Builder его нет). Что STL-библиотеку подключать, что-ли?
2)если на NET то код
using namespace System;
using namespace System::Collections; //
…..
book * b; ArrayList * st;
for (int i=0;i<5;i++)
{
b=new book("title",i+100);
st->Add(b);
}
То компилятор выдаёт ошибку
Add' : cannot convert parameter 1 from 'book *' to 'System::Object __gc *'
Если попытаться обойтись вообще без коллекций только динамическим массивом
book * b;
b=new book[5];//ошибка – в классе Book нет конструктора без параметров
//а почему он собственно должен быть?
Возможно выходом было бы использование приёма хранения экземпляров созданных объектов в статическом массиве класса (т.е внутри класса)?
Как вообще на C++ программисты управляются с множкством объектом класса?
Очень часто есть необходимость создания множества экземпляров классов (заранее неизвестно сколько). И для обращения к методам и свойствам любого экземпляра их хранить либо в динамическом массиве либо в коллекции.
Проблема в том, что в C++ нет оператора аналогичного Redim в VB
Если в среде NET будь то VB NET или C++ есть коллекция ArrayList
Пишешь на VB без проблем
Dim coll As New ArrayList, w As Book 'экземпляр класса Book
For i = 0 To n
Dim w As New Служаший(nm(i), i+100)
coll.Add(w)
next i
coll(3).Оклад(); //далее без проблем у любого элемента коллекции вызываешь метод класса
//несм на то что это элем коллекции , он автом преобразуется к типу класса
На С++ подобное у меня вызывает ряд проблем
1)во первых если пишем в NET то, слава богу есть ArrayList (в С++ Builder его нет). Что STL-библиотеку подключать, что-ли?
2)если на NET то код
using namespace System;
using namespace System::Collections; //
…..
book * b; ArrayList * st;
for (int i=0;i<5;i++)
{
b=new book("title",i+100);
st->Add(b);
}
То компилятор выдаёт ошибку
Add' : cannot convert parameter 1 from 'book *' to 'System::Object __gc *'
Если попытаться обойтись вообще без коллекций только динамическим массивом
book * b;
b=new book[5];//ошибка – в классе Book нет конструктора без параметров
//а почему он собственно должен быть?
Возможно выходом было бы использование приёма хранения экземпляров созданных объектов в статическом массиве класса (т.е внутри класса)?
Как вообще на C++ программисты управляются с множкством объектом класса?