Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Effective C++ 정리
Chapter 1, chapter2
C++를 언어들의 연합체로 바라보는 안목
• C + 클래스 != C++
• 템플릿은 프로그램 설계에 새로운 사고방식 제공
• STL은 확장성에 대한 지평을 염
• C++은 다중 패러다임 프로그래밍 언어
->절차적, 객체...
#define 보다 const, enum ,inline
• 매크로는 컴파일러에게 넘어가기 전 상수로 바꾸어 버린다
->기호 테이블에 이름이 없기에 디버깅이 힘들다.
• 따라서 매크로 대신 상수를 쓰는 것이 좋다 – co...
Const를 적극적으로 활용하자
• Const를 사용하여 컴파일러가 실수하는 부분을 줄일 수 있다.
->외부 변경을 불가능하게 함.
• Const를 쓰면 어떤 값이 불변이어야 한다는 의도파악이 쉽다.
• 정적 멤버, 비...
객체를 사용하기 전에 반드시 초기화
• 초기화를 하지 않으면 그것에 대해 계속 신경을 써주어야 함
-> 가장 좋은 방법은 모든 객체를 사용하기 전에 항상 초기화를
해주는 것.
• 생성자에서 그 객체의 모든 것을 초기화하...
C++이 만들어 호출해버리는 함수들 주의
• 컴파일러가 만들어낸 복사 생성자, 복사 대입연산자가 하는 일은
원본 객체의 비정적 데이터를 사본 객체쪽으로 단순 복사
• 컴파일러가 자동 생산하는 것이 아닌, 생성자 인자가 ...
다형성을 가진 기본 클래스에서는 소멸자
를 반드시 가상소멸자로 선언
• 대체로 가상 소멸자를 선언하는 것은 그 클래스에 가상 함수가
하날도 들어 있는 경우로 한정할 것.
• 추상 클래스는 기본 클래스로 쓰이고, 가상 소...
예외의 상황이 소멸자를 떠나지 못하게 막
기
• 소멸자에서는 예외가 빠져나가지 못하도록 해야 한다.
• 소멸자 안에서 호출된 함수가 예외를 던질 가능성이 있다면, 그
처리는 소멸자에서 어떻게든 처리해야 한다.
• 예외에...
객체 생성 및 소멸 과정 중에는 절대로 가
상 함수를 호출하지 말 것
• 파생 클래스 객체가 생성 될 때 그 객체의 기본 클래스 부분이 파
생 클래스 부분보다 먼저 호출
-> 기본 클래스가 생성 중에는 아직 파생 클래스...
Operator= 에서는 자기대입에 대한 처리
가 빠지지 않도록 해야한다
• 여러 곳에서 하나의 객체를 참조하는 상태 -> 중복 참조의 경우에
대비해야 한다.
• 자기 참조의 가능성이 있는 코드에 대비해야 한다.
-> ...
객체의 모든 부분을 빠짐없이 복사할 것
• 객체 복사 함수 -> 복사 생성자, 복사 대입 연산자
• 혹여 복사 되지 않는 부분이 있어도 컴파일러는 알려주지 않음
• 객체 복사 함수는 주어진 객체의 모든 데이터 멤버 및 ...
Prochain SlideShare
Chargement dans…5
×

Effective c++ 정리 1~2

1 166 vues

Publié le

Effective c++ 1~2챕터 정리

Publié dans : Industrie automobile
  • Soyez le premier à commenter

Effective c++ 정리 1~2

  1. 1. Effective C++ 정리 Chapter 1, chapter2
  2. 2. C++를 언어들의 연합체로 바라보는 안목 • C + 클래스 != C++ • 템플릿은 프로그램 설계에 새로운 사고방식 제공 • STL은 확장성에 대한 지평을 염 • C++은 다중 패러다임 프로그래밍 언어 ->절차적, 객체지향, 함수식, 일반화, 메타프로그래밍 개념까지 지원 -> C++의 효과적인 프로그래밍을 위해서는 4가지의 특징이 적재 적소에 잘 어우러져야 한다.
  3. 3. #define 보다 const, enum ,inline • 매크로는 컴파일러에게 넘어가기 전 상수로 바꾸어 버린다 ->기호 테이블에 이름이 없기에 디버깅이 힘들다. • 따라서 매크로 대신 상수를 쓰는 것이 좋다 – const • 클래스 상수를 #define으로 만들면 안 된다. ->쓸 수도 없고, 객체지향의 캡슐화 혜택도 받을 수 없다. • 기존 메크로를 이용한 함수가 아닌 템플릿을 이용해야 한다. -> 매크로를 될 수 있으면 적게 쓰는 것이 좋다.
  4. 4. Const를 적극적으로 활용하자 • Const를 사용하여 컴파일러가 실수하는 부분을 줄일 수 있다. ->외부 변경을 불가능하게 함. • Const를 쓰면 어떤 값이 불변이어야 한다는 의도파악이 쉽다. • 정적 멤버, 비정적 데이터 멤버 모두 상수로 선언 가능 • 포인터와 포인터가 가리키는 대상에도 const 사용이 가능하다. • 함수 반환 값에 const를 이용하면 효율과 안정성을 가진다. • 멤버 함수에 붙는 const 키워드는 해당 멤버 함수가 상수 객체에 대해 호출될 함수라는 것을 의미
  5. 5. 객체를 사용하기 전에 반드시 초기화 • 초기화를 하지 않으면 그것에 대해 계속 신경을 써주어야 함 -> 가장 좋은 방법은 모든 객체를 사용하기 전에 항상 초기화를 해주는 것. • 생성자에서 그 객체의 모든 것을 초기화하자(대입과 혼동 X) • 클래스 데이터 멤버는 모두 초기화 리스트로 초기화 할 것 • 상수이거나 참조자로 되어 있는 데이터 멤버의 경우는 반드시 초 기되어야 한다. -> 상수와 참조자는 대입 자체가 불가능
  6. 6. C++이 만들어 호출해버리는 함수들 주의 • 컴파일러가 만들어낸 복사 생성자, 복사 대입연산자가 하는 일은 원본 객체의 비정적 데이터를 사본 객체쪽으로 단순 복사 • 컴파일러가 자동 생산하는 것이 아닌, 생성자 인자가 꼭 필요한 클래스를 만든다면 컴파일러가 눈치 없이 기본 생성자를 만들지 는 않는다. • 컴파일러가 만들어낸 함수가 필요없으면 확실히 이들의 사용을 금해버리는게 좋다. ->컴파일러가 자동으로 함수생산하는 것을 막으려면 private 멤 버로 선언하면 된다.(외부로부터의 호출 차단)
  7. 7. 다형성을 가진 기본 클래스에서는 소멸자 를 반드시 가상소멸자로 선언 • 대체로 가상 소멸자를 선언하는 것은 그 클래스에 가상 함수가 하날도 들어 있는 경우로 한정할 것. • 추상 클래스는 기본 클래스로 쓰이고, 가상 소멸자를 가지는게 원칙이다. • 순수 가상 함수가 있으면 그것이 바로 추상 클래스다. ->즉 추상 클래스는 순수 가상 소멸자를 선언해야하고, 기본 클래 스가 아니거나, 다형성을 갖지 않는 클래스에는 가상 소멸자를 선언하지 말아야 한다.
  8. 8. 예외의 상황이 소멸자를 떠나지 못하게 막 기 • 소멸자에서는 예외가 빠져나가지 못하도록 해야 한다. • 소멸자 안에서 호출된 함수가 예외를 던질 가능성이 있다면, 그 처리는 소멸자에서 어떻게든 처리해야 한다. • 예외에 대한 사용자의 반응이 필요하더라도 소멸자가 아닌 보통 의 함수로 제공해야 한다. • 예외를 그냥 무시하는 것은 좋지 않다. ->무엇이 잘못됐는지 알려주는 정보를 무시하기 때문이다. • 소멸자에서 적절하게 처리해야 한다.
  9. 9. 객체 생성 및 소멸 과정 중에는 절대로 가 상 함수를 호출하지 말 것 • 파생 클래스 객체가 생성 될 때 그 객체의 기본 클래스 부분이 파 생 클래스 부분보다 먼저 호출 -> 기본 클래스가 생성 중에는 아직 파생 클래스가 생성이 되지 않았는데, 가상 함수를 호출하는 것은 초기화 하지 않은 어떤것 에 대한 접근을 하겠다는 것, 매우 위험. • 기본 클래스 생성 과정에는 가상함수가 먹히지 않는다. • 생성자, 소멸자에서 가상함수를 호출하면 안 된다. • 기본클래스 생성 중에는 생성자나 소멸자에 해당하는 클래스의 파생 클래스 쪽으로는 내려가지 않는다.
  10. 10. Operator= 에서는 자기대입에 대한 처리 가 빠지지 않도록 해야한다 • 여러 곳에서 하나의 객체를 참조하는 상태 -> 중복 참조의 경우에 대비해야 한다. • 자기 참조의 가능성이 있는 코드에 대비해야 한다. -> 어떤 객체가 그 자신에 대입되는 경우를 제대로 처리해야한다. • 원본과 복사대상 객체의 주소비교, 문장의 순서 조정, 복사 후 맞 바꾸기 기법 등등의 방법이 있다. -> 두 개 이상의 객체에 대해 동작하는 함수가 있다면, 이 함수에 넘겨지는 객체들이 사실 같은 객체인 경우에 동작을 반드시 확인 해야한다.
  11. 11. 객체의 모든 부분을 빠짐없이 복사할 것 • 객체 복사 함수 -> 복사 생성자, 복사 대입 연산자 • 혹여 복사 되지 않는 부분이 있어도 컴파일러는 알려주지 않음 • 객체 복사 함수는 주어진 객체의 모든 데이터 멤버 및 모든 기본 클래스 부분을 빠드리지 말고 복사해야 한다. • 클래스의 복사 함수 두 개 구현 시 한쪽을 이용해 다른 쪽을 구현 하려는 짓은 하지 말 것. • 어떤 클래스가 상속한 기본 클래스의 복사 함수가 있다면 그 함 수도 호출을 해주어야 한다.

×