Как создать динамический массив объектов (конструктор обязателен)
Итак, допустим, у меня есть класс classarr, и у него нет конструктора по умолчанию.
В кач-ве параметра для конструктора передаётся строка.
У меня есть массив параметров для конструкторов будущих классов params, а так же кол-во элементов N.
Как можно создать динамический массив таких вот объектов?
Пробовал что-то типа classar* qwerty = new classarr(params[0])[N];,
хотел сначала просто сделать массив объектов, не важно, от какого параметра, а потом в цикле перезаписать, но вс ругается на такую запись, говорит, не существует подходящей функции преобразования из "classarr" в "classarr *"
Студент, 1 курс, можно что-нибудь относительно простенькое? :3
Ответы (2 шт):
Вы хотите чего-то такого?
struct classarr
{
classarr(const char * s):s(s){}
const char * s;
};
int main(int argc, const char * argv[])
{
classarr* a = new classarr[3] { "aaa", "bbb", "ccc" };
cout << a[1].s;
}
лучше все таки определить конструктор по умолчанию, инкапсулировать ваши данные и потом изменять их через специальные методы
class Something
{
private:
const char* str;
public:
Something() : str("") {}
Something(const char* str) { this->str = str; }
void set_str(const char* str) { this->str = str; }
const char* get_str() const { return str; }
};
вариант без конструктора по умолчанию
int main() { int N = 2; Something* arr = new Something[N]{ "a", "b" }; delete[] arr; return 0; }вариант c конструктором по умолчанию и использованием "сеттера"
int main() { int N = 2; Something *arr = new Something[N]; for (int i = 0;i < N;++i) { arr[i].set_str("a"); } delete[] arr; return 0; }