{ 상속성을 주의해서 사용해야 하는 이유는 "강력한 관계"는 보다 쉽게 "강력한 상처"를 줄수 있기 때문이다. 상속은 C++ 에서 손에 꼽힐 정도로 강력한 관계를 맺게 해주는 개념이다. 상속을 사용하면, 다음과 같은 이점을 살리기 어려워 진다. 1. 코드의 유연성 A 클래스와 B 클래스가 서로 독립 될 수 있는 경우, 각각의 변경은 서로에게 영향을 미치지 않으므로, 언제 어디서든 A는 B와는 상관 없이, B는 A와 상관없이 사용 될 수 있다. 2. 빠른 컴파일 각각의 변화에 따른 컴파일을 할 필요가 없다. 만약 B 클래스가 A 클래스를 상속해서 구현되었다면, A 클래스의 변화가 있을 때마다 B 클래스 역시 재컴파일 해야 하는 시간을 내놓아야 한다. 3. 적은 혼란 각각 독립적이기 때문에, 한 클래스에만 ..
책 정리/C++ Coding Standards : C++ 코딩의 정석 검색 결과
{ 이번 항목에서 이 문구가 제일 마음에 와 닿는다. "나누고 정복하라. 작은 클래스가 만들기도 쉽고, 얻기도 쉬울 뿐만 아니라 테스트하고 사용하기도 쉬우며, 다양한 상황에서 활용하기에도 편리하다." 왜 이 부분이 와 닿았냐면, 나는 보통 주말에 청소를 한다. 여러가지 이유가 있겠지만, 아마도 빨래를 할 수 있는 날이기 때문이다. 그래서 바닥을 쓸거나 닦거나 책정리 나 쓰래기를 정리하는것을 몰아서 처리 한다. 이것은 청소 할 때마다 불편했다. 왜냐하면 좋지 못한 환경에서 지내야 하고, 청소 할 때 마다 많은 먼지가 발생하고, 이 먼지들이 여러곳에 달라 붙는다. 다시 이 먼지들을 털어내면서 더 많은 시간이 잡아 먹게 된다. 이제야 나는 청소를 할 수 있다면, 조금씩 청소를 해야 한다고 생각 했고, 각 파트..
{ 왜냐하면 클래스를 어정쩡하게 만들면, 가독성이나 각종 논리적 에러에 혼란이 오기 때문이다. 일반적으로 각 상황에 맞는 클래스 작성법을 설명한다. 값들을 저장하는 클래스 1. 복사 할당자, 복사 생성자가 존재한다. 2. 가상 함수가 없다. 3. 클래스의 객체 자체가 직접 사용 된다. 4. 기본 자료형 처럼 쓰인다. 기반 클래스 1. 공용이면서 가상이거나 보호된 가상이 아닌 소멸자가 있다. 2. 가상 함수가 있다. 3. 인스턴스는 대개 힙이나 스마트 포인터로 만든다. 특성 클래스 1. typedef와 정적 함수만 있으며. 상태 변경이 불가능하다. 2. 함수 오버로딩의 분기 조건에 많이 쓰인다. 정책 클래스 1. 특정한 클래스들에게 어떻게 구현해야 되는지 강제하기 위해서 사용 한다.(복사 할당, 생성이 안..
{ 왜냐하면, 함수의 인자 처리 순서는 각 컴파일러마다 다르며, 컴파일러 버전마다 다를 수도 있다. 결국 함수 인자의 처리 순서를 예상하고 함수에 인자를 전달한다면, 나중에 문제가 생길 위험이 있다. 그러니 이번 항목에서 말하는 제목을 반드시 기억해 두는 것이 좋다. 이 책은 안드레이 안렉산드레스쿠(Andrei Alexandrescu)와 허브 셔터(Herb Sutter) 가 만든 책으로 허브 셔터는 자신의 Exceptional C++ 에서 "스마트 포인터를 잘 사용하는 방법"에 대해서 썻던 항목들에, 이 문제점도 같이 정리해 두었었다. 그러므로 나는 이 항목에 대해서 더 이야기 하지는 않을 것이다. 왜냐하면 아주 간단하게 예만 보여줘도 충분히 이해 가능하기 떄문이다. 이 예제코드는 함수의 인자 처리 순서..
{ 알다시피 저 연산자들은 컴파일러에서 특별히 다루어 지며, 최적화가 이루어져 "단축 평가"가 되는 연산자 들이다. 만약 저 연산자들을 오버로딩 한다면, "단축 평가"는 무너지게 되고, 단축 평가를 예상하고 만들었던 코드를 단축평가가 없는 상태로 다시 만들어야 한다. 이래나 저래나 저 연산자들 까지 오버로딩 한다면, "이거 내가 잘짜고 있는거 맞나?" 라고 생각해 봐야 할 것이다. }
{ 즉, 암시적 타입 변환을 피하기 위해 오버로딩을 쓰라는 것이다, 그 이유는 C++은 동일한 이름의 함수라면 매개변수로 함수들을 구분짖는데, 이런 함수들 중에서 전달된 인자와 타입이 가장 "비슷한" 함수가 있다면, 암시적으로 형이 변하기전에 그 함수가 호출 되고, 없다면 모호성 에러를 벹어내게 해주기 때문이다. 즉, 이런 C++의 특징을 이용하여, 암시적 타입 변환을 피하라는 것이다. 다음 코드는 함수 f() 들 중에 float 매개변수를 받는 함수가 없을 때, 모호성 에러를 벹어내며서 컴파일 되지 않는 것을 보여 준다. 모호성 에러 예) #include void f( char ) { std::cout
최근댓글