1
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에서 테스트 할 때 "배열 새 값의 괄호 안의 초기화 코드"오류를 보여줍니다. 이것은 학교 프로젝트의 완성을위한 것이며 벡터가 허용되지 않습니다 (위에서 설명한 것보다 다른 방법을 생각할 수는 없지만 내 조사를하는 것이 현명 할 것입니다) ...C++에서 매개 변수화 된 객체의 배열을 만드는 방법은 무엇입니까?

답변

0

기본값이 아닌 생성자를 사용하여 동적 배열의 요소를 초기화하는 구문은 없습니다.

먼저 배열을 만든 다음 요소를 반복하고 각 요소를 개별적으로 할당해야합니다. 아마도 가장 간단한 방법은 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; 
} 

enter image description here