전체 글 147

[Effective C++] Item10_대입 연산자는 *this의 참조자를 반환하게 하자.

Item10_대입 연산자는 *this의 참조자를 반환하게 하자.챕터 핵심 내용대입 연산자는 *this의 참조자를 반환하자.- 대입 연산자는 *this의 참조자를 반환하자.대입은 우측 연관(right-associative) 연산이다.객체에서 대입 연산자를 오버로딩할 때, 내장 타입의 그것과 동일한 기능을 수행하려면 *this의 참조자를 반환해야 한다.모든 형태의 대입 연산자에서 지켜져야 한다.

카테고리 없음 2018.01.29

[Effective C++] Item9_객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자

Item9_객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자챕터 핵심 내용생성자 혹은 소멸자 안에서 가상 함수를 호출하지 말라.- 생성자 혹은 소멸자 안에서 가상 함수를 호출하지 말라.생성자 혹은 소멸자 안에서 가상 함수를 호출하면호출 결과가 원하는 대로 돌아가지 않는다.원하는 대로 돌아가도 찝찝할 것이다.기본 클래스의 생성자가 호출될 동안에는, 가상 함수는 절대로 파생 클래스 아래로 내려가지 않는다.즉, 파생 클래스 객체의 기본 클래스 부분이 생성되는 동안은, 그 객체의 타입은 기본 클래스이다.소멸자의 경우도 마찬가지이다.대신에 필요한 정보를 매개변수로 전달하게끔 설계하자. 즉, 비가상 함수로 만들어버리자.도우미 함수를 만들어 생성자에 정보를 전달할 수도 있다.이 같은 일이 일어나는 이..

카테고리 없음 2018.01.26

[Effective C++] Item8_예외가 소멸자를 떠나지 못하도록 붙들어 놓자

Item8_예외가 소멸자를 떠나지 못하도록 붙들어 놓자챕터 핵심 내용소멸자에서는 예외가 빠져나가면 안 된다. 만약 소멸자 안에서 호출된 함수가 예외를 던질 가능성이 있다면, 어떤 예외이든지 소멸자에서 모두 받아낸 후에 삼켜 버리든지 프로그램을 끝내든지 해야 한다.어떤 클래스의 연산이 진행되다가 던진 예외에 대해 사용자가 반응해야 할 필요가 있다면, 해당 연산을 제공하는 함수는 반드시 보통의 함수(즉, 소멸자가 아닌 함수)여야 한다.- 소멸자에서는 예외가 빠져나가면 안 된다. 만약 소멸자 안에서 호출된 함수가 예외를 던질 가능성이 있다면, 어떤 예외이든지 소멸자에서 모두 받아낸 후에 삼켜 버리든지 프로그램을 끝내든지 해야 한다C++은 예외를 내보내는 소멸자를 좋아하지 않는다.소멸자 안에서 예외가 발생했다면..

카테고리 없음 2018.01.26

[Effective C++] Item7_다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자

Item7_다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자챕터 핵심 내용다형성을 가진 기본 클래스에는 반드시 가상 소멸자를 선언해야 한다.기본 클래스로 설계되지 않았거나 다형성을 갖도록 설계되지 않은 클래스에는 가상 소멸자를 선언하지 말아야 한다.- 다형성을 가진 기본 클래스에는 반드시 가상 소멸자를 선언해야 한다기본 클래스 포인터를 통해 파생 클래스 객체가 삭제될 때 그 기본 클래스에 비가상 소멸자가 들어있으면 미정의 동작을 일으킨다.가상 소멸자로 선언하지 않으면 파생 클래스 부분이 소멸되지 않는다.이를 이용해 추상 클래스를 만들 때, 마땅히 넣을 가상 함수가 없다면 순수 가상 소멸자를 이용할 수 있다. 단, 정의까지 해야 한다.- 기본 클래스로 설계되지 않았거나 다형성을 갖도록..

카테고리 없음 2018.01.26

[Effective C++] Item6_컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자

Item6_컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자챕터 핵심 내용컴파일러에서 자동으로 제공하는 기능을 허용하지 않으려면, 대응되는 멤버 함수를 private으로 선언한 후에 구현을 하지 말자.- 컴파일러에서 자동으로 제공하는 기능을 허용하지 않으려면, 대응되는 멤버 함수를 private으로 선언한 후에 구현을 하지 말자사본을 만드는 행위가 필요하지 않다면 복사 생성자와 복사 대입 연산자를 private 접근으로 만들어 버리자.프렌드 함수의 접근도 막으려면 선언만 하고 구현을 하지 말자.링크 시점 오류를 컴파일 시점 오류로 옮기고 싶다면 인터페이스 형식처럼 만들어 private 상속을 이용하는 방식으로 구현할 수 있다.후기(postscript)C++11부터는 클래스 메소드에..

카테고리 없음 2018.01.25

[Effective C++] Item5_C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자

Item5_C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자챕터 핵심 내용컴파일러는 경우에 따라 클래스에 대해 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 암시적으로 만들어 놓을 수 있다.- 컴파일러는 경우에 따라 클래스에 대해 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 암시적으로 만들어 놓을 수 있다.기본 생성자는 생성자 함수가 아무것도 없을 시 자동으로 생성된다.복사 생성자, 복사 대입 연산자가 정의되어 있지 않은 상태에서 대입이나 복사를 시도한다면, 컴파일러에 의해 자동으로 생성된다.소멸자를 정의하지 않을 시 자동으로 생성된다.컴파일러에 의해 만들어진 합성 함수는 모두 기본형이고, public에 inline이다.후기(postscript)C++11부터는 이동 의..

카테고리 없음 2018.01.25

[Effective C++] Item4_객체를 사용하기 전에 반드시 그 객체를 초기화하자

Item4_객체를 사용하기 전에 반드시 그 객체를 초기화하자챕터 핵심 내용기본제공 타입의 객체는 직접 손으로 초기화 하자. 경우에 따라 저절로 되기도 하고 안되기도 하기 때문이다.생성자에서는, 멤버 초기화 리스트를 사용하자. 그리고 초기화 리스트에 멤버를 나열할 때는 클래스에 각 데이터 멤버가 선언된 순서와 똑같이 나열하자.여러 번역 단위에 있는 비지역 정적 객체들의 초기화 순서 문제는 피해서 설계하자. 비지역 정적 객체를 지역 정적 객체로 바꾸면 된다.- 기본제공 타입의 객체는 직접 손으로 초기화 하자. 경우에 따라 저절로 되기도 하고 안되기도 하기 때문이다초기화되지 않은 값을 읽으면 미정의 동작이 일어난다.모든 객체를 사용하기 전에 항상 초기화하자.- 생성자에서는, 멤버 초기화 리스트를 사용하자. 그..

카테고리 없음 2018.01.25

[Effective C++] Item3_낌새만 보이면 const를 들이대보자

Item3_낌새만 보이면 const를 들이대보자챕터 핵심 내용const를 붙여 선언하면 컴파일러가 사용상의 에러를 잡아내는 데 도움을 준다.컴파일러 쪽에서 보면 비트수준 상수성을 지켜야 하지만, 우리는 개념적인(논리적인) 상수성을 사용해서 프로그래밍 해야한다.상수 멤버 및 비상수 멤버 함수가 기능적으로 서로 똑같게 구현되어 있을 경우에, 코드 중복을 피하고 싶다면 비상수 버전이 상수 버전을 호출하게 하라.- const를 붙여 선언하면 컴파일러가 사용상의 에러를 잡아내는 데 도움을 준다const를 사용할 수 있는 곳에는 적극 활용하자.의도치 않은 오류를 잡아내는 데 많은 도움을 준다.class Rational { ... }; const Rational operator*(const Rational& lhs,..

카테고리 없음 2018.01.24

Item2 - #define을 쓰려거든 const, enum, inline을 떠올리자

Item2 - #define을 쓰려거든 const, enum, inline을 떠올리자챕터 핵심 내용단순한 상수를 쓸 대는, #define보다 const 객체 혹은 enum을 우선 고려하자.함수처럼 쓰이는 매크로를 만들려면, #define 매크로보다 인라인 함수를 우선 고려하자.- 단순한 상수를 쓸 대는, #define보다 const 객체 혹은 enum을 우선 고려하자전처리기로 기호상수를 정의할 시, 컴파일러의 기호 테이블에 추가되지 않는다.이는, 작동 방식이 '대체'이기 때문이다.디버깅을 할 때, 난감할 수 있다.또한, 코드의 길이가 늘어난다.클래스 상수를 정의할 땐, enum을 응용할 수 있다.동작 방식이 const보다 #define에 가깝다.옛날 코드들에게서 발견될 수 있다.- 함수처럼 쓰이는 매크로..

카테고리 없음 2018.01.24

[Review] 모던 C++ 프로그래밍 입문(음두헌 저) 리뷰

모던 C++ 프로그래밍 입문(음두헌 저) - 리뷰모던 C++ 프로그래밍 입문책 소개pclaf라는 WinAPI 프레임워크를 이용해 GUI 프로그래밍과 모던 C++을 익힐 수 있는 책이다. 단계별로 진행하면서 카드 게임을 완성하고 더불어 객체지향 개념도 정립할 수 있게 도와준다. STL과 일반화 프로그래밍도 소개해주고 있으며, 다양한 예제로 실력 향상을 도와주는 책이다.챕터 별로 '실습 과제 - 필수 문법 - 응용 과제 - 연습 문제'로 구성되어 있다. 실습 과제 전, 비유를 통해 이론적인 내용들을 쉽게 설명한다. 실습 과제는 따라하면서 객체지향 개념을 습득하는 과정으로 되어 있고, 필수 문법은 챕터 별 필수적인 문법을 예제 위주로 다루며, 응용 과제에서는 실습 과제와 필수 문법에서 다룬 문법 요소들을 응용..

Outdated/Book 2018.01.19