Coding

    [C++ Primer Plus] 18. Visiting with the New C++ Standard

    대답해야 할 질문들 auto 타입의 type deduction 시점은 언제인가? decltype의 사용법은 어떻게 되는가? move semactics는 어떻게 사용할 수 있는가? c++11의 클래스에서 자동생성되는 함수 6개는 무엇인가? override와 final 키워드의 의미는 무엇인가? 람다식이 함수 포인터와 펑터보다 우월한 이유는 무엇인가? wrapper를 쓰는 이유는 무엇인가? variadic template은 어떻게 사용할 수 있는가? C++11 Features Revisited New Types C++11에서 64bit int 지원을 위해 long long, unsigned long long 타입을 추가됐다. 비슷한 이유로 char16_t, char32_t도 추가됐다. Uniform Init..

    [C++ Primer Plus] 16. The string Class and the Standard Template Library

    대답해야 할 질문 smart pointer의 3가지 종류를 말하고 이를 설명하시오. shared_ptr에서 발생할 수 있는 circular referencing 상황을 설명하고 해결법을 말하시오. iterator의 5가지 종류를 말하고 차이점을 설명하시오. The string class 지엽적인 내용 같아서 생략 Smart Pointer Template Classes Smart Pointer(이하 '스마트 포인터')는 포인터에 몇개 기능이 더 있는 클래스 오브젝트다. 기본적으로 dynamic memory allocation을 하면 delete를 해야 한다. 빠트리면 leak이 난다. 그러니까 leak을 피하는 방법은 프로그래머가 'delete를 해야지!'하고 기억하는 것이다. 이건 뭐 방법이라고는 할 수..

    [C++ Primer Plus] 15. Friends, Exceptions, and More

    대답해야 할 질문들 Friend class와 Friend member function의 사용법이 무엇인가? Nested class를 쓰는 이유는 무엇인가? return과 throw의 차이점이 무엇인가? exception을 레퍼런스로 catch하는 이유는 무엇인가? undefined exception과 unexpected exception이 무엇인지 설명하고 어떻게 해결할 수 있는지 설명하시오. RTTI의 세가지 구성요소는 무엇인가? C++의 explicit casting을 설명하시오. Friends 이제까지 friend function만 배웠지만, friend class도 가능하다. friend class가 마치 OOP를 해칠 것만 같은 느낌을 주지만 그렇지 않다. 그 이유는 2개다. 먼저 friend ..

    [C++ Primer Plus] 14. Reusing Code in C++

    대답해야 할 질문들 has-a 관계를 가지는 두 가지 방법은 무엇인가? 다이아몬드 상속을 할 때, 신경써줘야하는 부분은 무엇인가? template class에서 implicit/explicit instantiation과 specialization의 문법은 무엇인가? Classes with Object Members 클래스가 오브젝트 멤버를 가지는 방법은 2가지다. 오브젝트를 변수로 선언한다. (containment) protected or private으로 상속한다. Private Inheritance 상속할 때, Private으로 상속하면 base-class의 public 멤버와 protected 멤버가 derived-class의 private 멤버가 된다. 즉, 인터페이스가 똑같이 이어지는 게 아니기..

    [C++ Primer Plus] 13. Class Inheritance

    대답할 질문 상속을 통해 어떤 일을 할 수 있는가? derived-class의 constructor와 destructor는 어떻게 작동하는가? Is-a relationship은 무엇인가? dynamic binding이 default가 아닌 이유가 무엇인가? virtual function은 어떻게 작동하는가? derived-class에서 함수를 재정의할 때 무엇을 유의해야 하는가? Abstract Base Class는 어떻게 만들 수 있는가? 왜 만드는가? Class Inheritance OOP의 목적 중 하나가 코드 재사용성이다. Inheritance(상속)는 이 특성을 강화한다. C library를 생각해보자. 따로 소스 코드가 제공되지 않는 라이브러리라면 우리는 특정 함수를 입맛대로 바꾸기 어려울 것..

    [C++ Prime Plus] 12. Classes and Dynamic Memory Allocation

    Dynamic Memory and Classes C++은 Memory allocation을 runtime에 정하는 방식이다. C++은 Dynamic Memory allocation을 위해 new와 delete 연산자를 사용한다. 이로 인해, 우리는 새로운 문제를 풀어야만 한다. Special Member Functions C++은 다음 멤버 함수를 자동으로 만들어낸다. 만약 생성자가 없으면, default constructor를 만들어낸다. 따로 정의하지 않았다면, default destructor를 만들어낸다. 따로 정의하지 않았다면, copy constructor를 만들어낸다. 따로 정의하지 않았다면, = operator를 만들어낸다. 따로 정의하지 않았다면, & operator를 만들어낸다. 좀더 ..

    [C++ Prime Plus] 11. Working with Classes

    Operator Overloading Operator Overloading은 C++ Polymophism 중 하나다. Operator Overloading을 통해 사용자에게 실제로 어떻게 이런 연산이 이뤄지는지 감출 수 있다. 추상화는 OOP의 목표 중 하나다. Operator Overloading을 정의하는 문법은 다음과 같다. operator op(argument-list) 이 때, op는 새로운 symbol을 만들어낼 수 없다. 즉, operator@ 같은 건 만들 수 없다. 아래 예시를 보자. 컴파일러는 기본적으로 operator 왼쪽에 있는 오브젝트에서 정의됐다고 예상한다. district2 = sid + sara; district2 = sid.operator+(sara); // same Int..

    [C++ Primer Plus] 9. Memory Models and Namespaces

    Seperate Compilation 1챕터에서 말했듯, C++는 각 파일마다 컴파일을 따로(.c → .o)할 수 있다. 이런 방식덕분에 소스코드 하나를 수정하면 그거만 컴파일하고 링킹을 해서 실행파일을 만들 수 있다. Unix나 Linux의 make가 이런 관리를 도와준다. 한 소스 코드의 내용을 나눠야 한다고 생각해보자. 예를 들어, 클래스 구현부와 main()을 나누는 것이다. 이런 상황에서는 main에서 클래스 구현부를 알 필요가 있다. 이런 상황을 해결해주는 것이 #include 기능이다. 즉, 총 3개의 파일로 나눠질 것이다. 클래스의 정의와 메소드의 프로토타입을 담은 .hpp 파일 클래스 구현 코드를 담은 .cpp 파일 클래스 메소드를 사용하는 .cpp 파일 헤더 파일에는 주로 다음의 내용을..