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-constructor класса, передавая ему 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 вы можете использовать lambda как:
std::for_each(arr.begin(), arr.end(), [](const MyClass & m)
{
//working with m
});