MyClass *myVar;
myVar = new MyClass[num];
На самом деле в этой форме вы не можете вызвать конструктор, который принимает параметры. Это не разрешено языковой спецификацией.
Однако, если вы используете std::vector
, который я рекомендую вам использовать, тогда вы можете создать вектор, вызывающий конструктор не по умолчанию, как:
#include <vector> //header file where std::vector is defined
std::vector<MyClass> arr(num, MyClass(10,20));
Создает вектор из num
элементов, каждый элемент создается путем вызова copy-конструктора класса, передавая ему MyClass(10,20)
в качестве аргумента.
Вектор также хорош, потому что теперь вам не нужно управлять памятью самостоятельно. Ни ручное распределение, ни ручное освобождение. Кроме того, вы можете узнать количество элементов, позвонив по номеру arr.size()
в любое время. Вы всегда знаете, сколько элементов содержит вектор. Вы также можете добавлять элементы в любое время, просто вызвав .push_back()
функцию-член как:
arr.push_back(MyClass(20,30));
И теперь вы можете обращаться к элементам так же, как к массиву, то есть с помощью индекса:
f(arr[i]); // 0 <= i < arr.size();
Кроме того, вы можете использовать итераторы, которые облегчают идиоматическое программирование, позволяя вам использовать различные алгоритмические функции из заголовка <algorithm>
как:
#include <algorithm> //header file where std::for_each is defined
std::for_each(arr.begin(), arr.end(), f);
где f
- функция, которая принимает один аргумент типа MyClass&
(или MyClass const &
) в зависимости от того, что вы хотите сделать в f
.
В C ++ 11 вы можете использовать лямбду как:
std::for_each(arr.begin(), arr.end(), [](const MyClass & m)
{
//working with m
});