【问题标题】:How to create an array of parameterized objects in C++?如何在 C++ 中创建参数化对象数组?
【发布时间】:2017-12-11 01:09:03
【问题描述】:
 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++ shell 中测试时显示错误:“array new 中的带括号的初始化程序”。 这是为了完成一个学校项目,不允许使用向量(因为我发现这样做是明智的)尽管我想不出除了上面显示的方法之外的任何其他方法......

【问题讨论】:

    标签: c++ arrays parameters constructor parameterized-constructor


    【解决方案1】:

    没有使用非默认构造函数初始化动态数组元素的语法。

    您必须先创建数组,然后遍历元素并单独分配每个元素。可能最简单的方法是使用std::fill

    【讨论】:

      【解决方案2】:

      书籍数组是一维数组,定义如下:

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

      如果您假设所有书籍都有相同的页面,则您已将其作为默认参数传递给您的书籍类构造函数:

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

      【讨论】:

        【解决方案3】:

        使用模板:

        #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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-21
          • 1970-01-01
          • 2012-05-26
          • 1970-01-01
          • 2010-09-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多