Chapter 0 STL Container STL이란 Standard Template Library의 약자로 C++의 템플릿을 이용해 표준으로 정의된 라이브러리를 말한다. 여기서 컨테이너는 클래스 템플릿으로 구성되어있다. 컨테이너 변수를 선언할 때 컨테이너가 보유할 요소의 형식을 지정한다. 컨테이너는 데이터를 저장하고 잘 관리하기 위한 클래스라고 생각하면 된다. 컨테이너는 초기화리스트를 사용해 생성할 수 있으며, 요소의 추가, 제거 및 다른 작업들을 수행하기 위한 멤버 함수들을 가지고 있다. 반복기(iterator)를 사용해 컨테이너의 요소를 반복하고 개별 요소에 접근할 수 있다. 멤버 함수와 연산자 및 전역 함수를 사용해 반복기를 명시적으로 사용할 수 있다. 모든 STL 컨테이너에 대한 반복기에 공통적..
Chapter 0 Template 이번 과제의 주제는 template이다. 템플릿은 함수나 클래스를 개별적으로 다시 작성하지 않아도, 여러 자료 형으로 사용할 수 있게 만들어 놓은 "틀"이라고 할 수 있다. 템플릿은 C++이 가지고 있는 프로그래밍 언어의 특징 중 하나인 일반화 프로그래밍의 기능 중 하나이다. 일반화 프로그래밍이란 데이터를 중시하는 객체 지향 프로그래밍과 달리 프로그램의 알고리즘에 중점을 두고 있다. C++에서의 템플릿은 크게 함수 템플릿과 클래스 템플릿으로 나눌 수 있다. 먼저, 함수 템플렛은 함수의 일반화된 선언을 뜻하며, 서로 다른 타입에서 동작하는 함수를 한 번에 정의할 수 있다. 임의의 타입으로 작성된 함수에 특정 타입을 매개변수로 전달하면, C++ 컴파일러는 해당 타입에 맞는 ..
23/03/14 이후 수정된 서브젝트로 다시 풀고 수정했습니다. Chapter 0 이번 과제의 주제는 cast이다. cast는 형변환이라는 의미로, 흔히 int형에서 float형 등으로 형태를 변환한다는 의미를 가지고 있다. 형변환에는 명시적 형변환과 암시적 형변환이 있다. C와 C++ 모두 지원하며, 42에서 C언어 과제를 할 때, 주로 사용한 형 변환이 명시적 형변환이다. // 명시적 형변환 float a = 1.23; int b; b = (int)a; // 명시적으로 float형인 a를 int형으로 변환해준다. std::cout
Chapter 0 이번 과제의 주제는 반복과 예외이다. 지금까지는 예외가 발생하면 그 상태로 에러를 반환하는 형태로 프로그램을 구현했다. 즉, "예외 -> 프로그램 종료" 라는 형식으로 코드를 작성했는데, 이번 과제에서는 예외가 발생한다면 다시 입력을 받거나, 예외가 발생한 구간부터 사용자가 작성한 코드를 동작하도록 만들어야 하는 것으로 보인다. 먼저, 이번 과제에서 자주 쓰일 try - catch 문에 대해 알아보도록 하자. Try - Catch 우리가 주로 사용하던 if문을 통한 예외처리 방식은 if 조건문이 굉장히 많이 쓰이고, 다방면으로 쓰이기 때문에 예외 처리를 위해 사용하는 것인지 한눈에 알아보기 힘들다. 이런 불편한 점 때문에, 가독성과 유지보수성을 위해 try-catch문을 사용하게 된다...
Chapter 0 Subtype polymorphism 서브타입 다형성이라는 것을 알아보기 전에, 다형성에 대해서 먼저 알아보자. 다형성이란, 하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미한다. 객체 지향 프로그래밍의 구성에서 저번 과제때 배웠던 상속과 더불어 중요하게 작용하는 특징 중 하나이다. 다형성 중 부모 클래스의 포인터 또는 참조형을 통해 자식 클래스를 사용하는 것을 의미하는 경우가 서브타입 다형성이다. C++에서의 다형성은 지난 과제들에서도 사용했던 가상함수, 연산자 오버로딩, 앞으로의 과제에서 사용 할 템플릿 등이 있다. 가상함수이 과정을 통해 같은 이름을 함수지만 내용이 다른 함수를 호출이 가능해진다.또한, 클래스를 상속할 경우, 소멸자에 virtual을 붙여주어야 깔끔하게 상속을..
Chapter 1 Introduction 이 과제는 내가 걸어가야할 C++이라는 여행길에 시작점에 객체지향프로그래밍이 어떤건지를 설명해주는것이 목적이라고 한다. 객체지향은 많은 언어들이 사용하는데, 왜 C++을 배우게 되느냐.. 하면 나의 오랜 친구(42에서만)인 C에서 파생된 언어이기 때문이라고 한다. C++은 복잡한 언어이기 때문에, 단순하게 유지하기 위해 내 코드를 C++ 98 standard로 컴파일 할것이라고 한다. Chapter 2 General Rules 컴파일 너의 C++ 코드는 "-Wall -Wextra -Werror" 플래그와 함께 컴파일 한다. 너의 코드는 "-std=c++98"를 플래그로 추가하고도 컴파일이 되어야 한다. 포멧과 네임 컨벤션 모든 문제의 디렉토리는 다음의 방식을 따른..