Как создать массив параметризованных объектов в C ++?

 class book{
private:
int numOfPages;
public:
book(int i){
numOfPages = i;
};
};

class library{
private:
book * arrOfBooks;
public:
library(int x, int y){
arrOfBooks = new book[x](y);
};
};
int main()
{
library(2, 4);
};

Используя приведенный выше пример кода, я хотел бы создать библиотеку книг, которые имеют одинаковое количество страниц. Поэтому в конструкторе объекта библиотеки при создании новой книги для помещения в массив я передаю аргумент в скобках.
Приведенный выше код при тестировании в Оболочка C ++ показывает ошибку: «инициализатор в скобках в массиве новый».
Это для завершения школьного проекта, и никакие векторы не разрешены (как было бы разумно сделать, как я обнаружил, проводя свое исследование), хотя я не могу придумать какие-либо другие способы сделать это, кроме показанного выше …

1

Решение

Нет синтаксиса для инициализации элементов динамического массива с использованием конструктора не по умолчанию.

Сначала вы должны создать массив, затем выполнить цикл по элементам и назначить каждый из них по отдельности. Возможно, самый простой способ сделать это — использовать std::fill,

0

Другие решения

Массив книг — это одномерный массив, и его следует определить следующим образом:

library(int x)
{
arrOfBooks = new book[x];
};

Если у вас есть предположение, что все книги имеют одну и ту же страницу, вы передаете ее в качестве параметра по умолчанию в конструктор класса ваших книг:

book(int i=200)//set the defautlt value here
{
numOfPages = i;
};
0

Используя шаблоны:

#include <iostream>

template <int book_capacity> class book
{
private:
int numOfPages;
public:
book(): numOfPages(book_capacity){}
};

template <int lib_capacity, int book_capacity> class library
{
private:
book<book_capacity> arrOfBooks[lib_capacity];
int cnt;
public:
library(): cnt(0) {}
void addBook(book<book_capacity> b)
{
if (cnt < lib_capacity)
{
arrOfBooks[cnt] = b;
cnt++;
std::cout << "book is added" << std::endl;
return;
}

std::cout << "library is full" << std::endl;
}
};

int main()
{

library<2, 4> lib;
book<4> b;

lib.addBook(b);
lib.addBook(b);
lib.addBook(b);
lib.addBook(b);

system("pause");
return 0;
}

введите описание изображения здесь

0
По вопросам рекламы [email protected]