제1장 일반적 프로그래밍과 C++ 표준 라이브러리 1. vector의 올바른 용법과 잘못된 용법 2. 문자열 포매팅, 1부: sprintf 3. 문자열 포매팅, 2부: 표준의 세련된 대안들 4. 표준 라이브러리 멤버 함수 5. 여러 수준의 일반성, 1부: 기초 6. 여러 수준의 일반성, 2부: 충분히 일반적인가? 7. 함수 템플릿을 특수화하지 말아야 하는 이유 8. 템플릿 친구 만들기 9. export의 한계, 1부: 기초 10. export의 한계, 2부: 상호작용, 유용성 문제, 지침들 제2장 예외 안전성 문제와 기법 11. try와 catch 12. 예외 안전성: 추구할 가치가 있는가? 13. 예외 명세에 대한 실용적인 고찰 제3장 클래스 설계, 상속, 다형성 14. 순서의 중요성 15. 접근 권한..
책 정리/Exceptional C++ Style 검색 결과
1 ) std::string::erase가 비멤버 함수가 될 수 있을까? 2 ) std::string의 나머지 멤버 함수들을 분석하고, 비멤버 함수들로 만들 수 잇는지(또는 그렇게 하는 것이 좋은지) 설명하라 a. replace b. copy와 substr c. compare d. find 군(find, find_*, rfind ) 이렇게 질문이 있는데, 하나의 진리에서 나온 것들이다. "클래스 구현시, non-member, non-friend function 으로 만들 수 없는 함수만, member 함수로 만들어라." 이번 항목의 요약을 책에서 그대로 옮긴다. 분활과 캡슐화는 좋은것이다. 특히 C++의 경우에는, 알고리즘과 컨테이너를 분리시키는 것이 좋다. STL도 대부분 그런 원칙에 따라 만들어 졌다..
1 ) string::resize가 비멤버 함수가 될 수 있을까? 설명하라. 될 수 있다. 공개 인터페이스로 확장시켜 놓고 swap 시키면 되는데 소스코드를 보자. template void resize( std::basic_string& s, typename Allocator::size_type n, charT c ) { if( n > s.max_size() ) throw std::length_error( "won't fit"); if( n
저번 항목에 이어서, 이번 항목은 리팩토링이다. 때 마침 리팩토링 관련 서적을 읽고 있던 터라, 그 필요성을 알게 되었었터라 "무엇을 어떻게 리팩토링 할까?" 에 대해서 생각해 보게 된다. 1 ) std::string의 멤버 함수들 중 멤버가 아니면 안되는 것들은 무엇이 있고, 왜 그런가? 멤버가 아니면 안되는 함수들은, 생성자, 소멸자, 할당 연산자, operator[] 연산자들이 있다. 이것은 멤버가 아니면, 어찌 할 수 없는 것들이다. 왜 생성자와 소멸자, operator=과, operator[] 연산자들은 왜 멤버로 놔야 할까? 여기서 중요한 개념을 짚어 봐야 한다. 스콧 마이어스는 "멤버로도 구현할 수 있고, 비친구 비멤버로도 구현 할 수 있는 함수가 있다면, 비친구 비멤버를 선호 해야 한다" ..
이번 항목은 std::string 의 스타일을 알아보고, 한가지 설계 지침을 통하여, 이 스타일을 간략하게 비평해 본다. 1 ) 일체적(monolithic) 클래스란 무엇이며, 왜 나쁜지 설명하라. 일체적(monolithic) 클래스란? 클래스가 매우 크고 무거워 더 이상 나눌 수 없는 클래스를 뜻한다. 매우 크다고 무겁다는 뜻은, 코드가 매우 방대하다는 뜻이다. 이게 왜 나쁜가? 코드의 량이 방대하면, 우선, 사용하기 힘들고, 수정하기 힘들며, 추가하기 힘들다. 이는 유지 보수가 무척이나 까다롭다는 것을 뜻한다. 예를 들자면, 1. 잠재적으로 개별적인 가능성을 한 클래스 안에서 집어 넣는다. 이는 다른 형식들과 함께 사용 할 가능성을 막아 버리는 것이므로, 사용 범위가 무척이나 좁아 진다. 2. 새로운..
최근댓글