목록Programming Language (46)
배움 저장소
printf vs cout ㄴprintf: c-style 입출력은 문자열과 파일을 구별한다. fprintf 함수처럼 별도의 함수를 사용한다. ㄴcout: c++은 cout으로 입출력을 모두 사용할 수 있어 편리하다. 18.1 istream으로 입력받기 cin은 문자열에서도 사용하지만 파일 입출력에서 유용하게 활용할 수 있다. 파일 읽기를 위해서 공부해보자 stream은 buffer에 저장된 자료를 꺼내오는 방식으로 동작한다. - 아래 예제를 실행해보자. 입력 문자 개수가 5개가 넘어가면 런타임 에러가 발생한다. char buf[5]; cin >> buf; cout > setw(5) >> buf; cout setw(5) >> buf; cout i >> f) cout
17.1 std::string과 std::wstring C스타일 문자열보다 편하게 사용할 수 있는 string 클래스와 wstring클래스를 소개한다 string과 wstring의 정의를 찾아가보면 아래를 확인할 수 있다. - 두 클래스 모두 basic_string 클래스를 활용하였고 템플릿 각 자료형으로 Instantiation한 결과이다. using string = basic_string; using wstring = basic_string; 이 때 w_char은 unsigned short이다. unsigned char보다 많은 문자를 다룰 수 있다. wide-character/unicode를 다룬다 wstring을 이용하여 다양한 언어를 출력해보았다 const wstring texts[] = { L..
16.1 표준 템플릿 라이브러리, 컨테이너 소개 Standard Template Libraries and Containers - STL은 Standard Template Library의 줄임말이다. Algorithms, Containers, Iterators, Functions가 있다. - STL과 Standard Library를 구분하지 않고 사용하기도 한다. - Standard Library를 특별히 공부하기 보다 필요할 때 필요한 내용을 찾아서 사용함이 현명하다. ㄴ https://en.cppreference.com/w/cpp/header Container 여러 자료형을 쉽게 다룰 수 있도록 만든 클래스로 여러 기능이 멤버함수로 구현되어있다. https://en.cppreference.com/w/c..
15.1 이동의 의미와 스마트 포인터 Move Semantics and Smart Pointers 스마트 포인터를 이해하기 위하여 이동의 의미를 이해하자 RAII : Resource Acquisition Is Initialization, ... binds the life cycle of a resource to the lifetime of an object. RAII를 위반하는 경우 - 동적할당 메모리를 저장하고 있는 포인터가 소멸될 때 동적할당메모리도 해제되어야 한다. 아래와 같은 경우 메모리를 해제하기 이전에 함수가 종료되어 메모리 누수가 발생하게 된다. int *ptr = new int[10]; // work with dynamic mem if (true) { return; } delete [] p..
14.1 예외처리의 기본 Exception Handling 프로그램은 정상적인 상황에 프로그램이 잘 작동할 뿐만 아니라 예외적인 상황에서도 그에 맞는 대처를 해야한다. 예외처리를 알아보자. 전통적인 예외처리 방법 (1) 함수 반환값으로 예외적인 상황을 알리는 경우 - 함수 내부에서 특정값을 예외적인 상황으로 표현한다. 함수 외부에서 이 값을 알고 있어야한다 int findFirstChar(const char* str, char ch) { for (size_t i = 0; i < strlen(str); ++i) if(str[i] == ch) return i; return -1; // no match } (2) 매개변수로 받은 값에 성공 여부를 알리는 경우 double divide(int x, int y, ..
같은 기능을 하지만 다른 자료형으로 동작하는 코드를 작성한다면 여러번 반복작업이 필요하다. 귀찮은 작업을 쉽게 해낼수 있는 템플릿을 사용해보자. 13.1 함수 템플릿 함수 템플릿에 특정 자료형을 사용하면 해당 자료형에 맞는 함수 코드가 만들어진다. 이를 Instantiation이라 표현한다. 자료형에 맞게 만들어진 함수 코드는 Instance라 부른다 //template // alternatives template T getMax(T x, T y) { return ( x > y ) ? x : y ; } int main() { std::cout
12.1 다형성의 기본 개념 자식객체가 상위 객체의 포인터를 사용하는 경우 자식 객체가 상위 객체의 포인터에 담겨 사용되는 경우 어떤 문제가 발생할까? 이 문제가 다형성과 관련있다 - 아래 예제에서 Cat 클래스는 Animal 클래스를 상속하였다. Cat 클래스가 오버라이딩한 멤버함수를 호출해보자. 아래에서 Cat Instance는 오버라이딩한 멤버함수를 호출한다. - Cat Instance를 Animal 포인터 자료형에 담아보자. 오버라이딩한 멤버함수를 호출해보자. 자식객체에서 구현한 오버라이딩이 적용되지 않는다! class Animal { protected: string m_name; public: Animal(string name): m_name(name){} string getName(){ ret..
11.1 상속의 기본 (1) Derived Class(상속받은 객체)는 Generalized Class(상위 객체)의 인스턴스를 멤버를 가지고 있다 class Mother { private: int m_i; public: int& getValue(){ return m_i; } void setValue(int i){ m_i = i; } }; class Child: public Mother {}; int main(){ Mother mom; mom.setValue(45); cout