요약 - 제네릭 컨테이너
Coddy C++ 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 104개 중 69번째.
챌린지
쉬움이 장에서 템플릿에 대해 배운 모든 내용을 한데 모은 GenericContainer 클래스 템플릿을 만들어 봅시다. 요소를 동적으로 저장하고 템플릿 기법을 통해 유용한 연산을 제공하는 유연하고 형식 안전한 컨테이너를 만들게 됩니다.
코드는 두 개의 파일로 구성합니다.
GenericContainer.h: 여기에 클래스 템플릿을 정의합니다.GenericContainer는 다음을 수행해야 합니다.배열을 가리키는 포인터를 사용해 요소를 동적으로 저장하고, 현재 크기와 용량도 추적합니다.
다음 핵심 메서드를 제공합니다.
- 초기 용량을 받는 생성자
- 동적 메모리를 올바르게 정리하는 소멸자
push(T value): 컨테이너에 요소를 추가합니다(이 과제에서는 용량이 항상 충분하다고 가정합니다).get(size_t index): 지정된 인덱스의 요소를 반환합니다.getSize(): 현재 요소의 개수를 반환합니다.
GenericContainer<T>&를 인수로 받아 모든 요소를 공백으로 구분해 출력하고 줄바꿈을 출력하는printContainer함수 템플릿을 추가합니다.GenericContainer<bool>에 대한printContainer템플릿 특수화를 만들어1또는0대신true또는false를 출력합니다.GenericContainer<T>&와 임의 개수의 값을 인수로 받는 가변 인자 함수 템플릿pushAll을 추가합니다. 폴드 표현식을 사용해 각 값을 컨테이너에 넣습니다.(container.push(args), ...);와 같이 쉼표 연산자를 사용하는 폴드는 각 인수에 대해 호출을 한 번씩 실행합니다.main.cpp: 입력 5개를 읽습니다(각각 별도의 줄에 입력).- 첫 번째 정수
- 두 번째 정수
- 세 번째 정수
- double 값
- 문자열로 표현된 불리언 값(
true또는false)
다음과 같이 컨테이너를 사용합니다.
- 용량이 10인
GenericContainer<int>를 만듭니다. pushAll을 사용해 정수 세 개를 한 번에 추가합니다.- 크기를 출력합니다:
Int container size: <size> printContainer를 호출해 정수를 출력합니다.- 용량이 5인
GenericContainer<double>을 만듭니다. - 각각의
push호출을 사용해 double 값과 리터럴2.5를 추가합니다. printContainer를 호출해 double 값을 출력합니다.- 용량이 5인
GenericContainer<bool>을 만듭니다. - 불리언 입력값과 리터럴
false를 추가합니다. printContainer를 호출해 불리언 값을 출력합니다(true/false가 표시되어야 합니다).
예를 들어, 입력값이 10, 20, 30, 3.14, true인 경우:
Int container size: 3
10 20 30
3.14 2.5
true false 이 과제에서는 컨테이너에 클래스 템플릿을 사용하고, 사용자 지정 불리언 출력에 템플릿 특수화를 사용하며, 유연한 pushAll 함수에 가변 인자 템플릿을 사용합니다. 컨테이너는 RAII 원칙에 따라 자체 메모리를 관리하며, 템플릿이 적절한 리소스 관리와 어떻게 결합되는지 보여 줍니다.
직접 해보기
#include <iostream>
#include <string>
#include "GenericContainer.h"
using namespace std;
int main() {
// 입력값 읽기
int num1, num2, num3;
double doubleVal;
string boolStr;
cin >> num1;
cin >> num2;
cin >> num3;
cin >> doubleVal;
cin >> boolStr;
// 문자열을 bool로 변환하기
bool boolVal = (boolStr == "true");
// TODO: 용량이 10인 GenericContainer<int> 만들기
// TODO: pushAll을 사용해 세 정수를 한 번에 추가하기
// TODO: 크기 출력하기: "Int container size: <size>"
// TODO: printContainer를 호출해 정수 표시하기
// TODO: 용량이 5인 GenericContainer<double> 만들기
// TODO: push를 각각 호출해 double 값과 2.5 추가하기
// TODO: printContainer를 호출해 double 값 표시하기
// TODO: 용량이 5인 GenericContainer<bool> 만들기
// TODO: 불리언 입력값과 false 추가하기
// TODO: printContainer를 호출해 불리언 값 표시하기
return 0;
}
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 C++ 컴파일러