언어/Effective C++

[Effective C++] #32_Public 상속 Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 6장 '상속 그리고 객체 지향 설계', 항목 32 "Public 상속 모델은 반드시 ~는~의 일종이다"에 해당하는 내용입니다. Public 상속의 의미 class Person {...}; class Student: public Person {...}; "Public 상속은 is-a(...는...의 일종이다)" 클래스 B를 클래스 A로부터 public 상속을 통해 파생시켰다면, B 타입으로 만들어진 모든 객체는 또한 A 타입의 객체이지만, A 타입으로 생성된 모든 객체는 B 타입의 객체가 아닙니다! 쌍방 관계가 성립..
[Effective C++] #28_예외 안전성 확보 Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 5장 '구현', 항목 31 "파일 사이의 컴파일 의존성을 최대로 줄이자"에 해당하는 내용입니다. 인터페이스와 구현 사이의 컴파일 의존성 #inlcude #include "data.h" #include "address.h" class Person { public: Person(const std::string& name, const Date& birthday, const Address& addr); std::string name() const; std::string birthDate() const; std::strin..
[Effective C++] #28_예외 안전성 확보 Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 5장 '구현', 항목 30 "인라인 함수는 미주알고주알 따져서 이해해 두자" 에 해당하는 내용입니다. 인라인 함수 인라인 함수는 함수 호출 시 발생하는 오버헤드를 줄이기 위해 함수를 호출하는 대신 함수가 호출되는 곳마다 함수 본문의 코드를 복사해 넣어 주는 방법입니다. 함수처럼 보이고, 함수처럼 동작하며, 메크로보다 훨씬 안전하고 쓰기 좋습니다. 책에서 얘기하는 '인라인 함수'의 장점은 이와 같습니다. 컴파일러 최적화는 함수 호출이 없는 코드가 연속되어 이어지는 구간에 적용되도도록 설계되어있고, 인라인 함수를 사용..
[Effective C++] #28_예외 안전성 확보 Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 5장 '구현', 항목 29 "예외 안전성이 확보되는 그날 위해 싸우자" 에 해당하는 내용입니다. 예외 안전성 보장에 실패한 예제 class PrettyMenu { public: ... void changeBackground(std::istream& imgSrc); ... private: Mutex mutex; image *bgImage; int imageChanges; }; //changeBackground 함수 내부 정의 void PrettyMenu::changeBackground(std::istream& img..
[Effective C++] #27_캐스팅은 절약하고 또 절약하자! Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 5장 '구현', 항목 28 "내부에서 사용하는 객체에 대한 핸들을 반환하는 코드는 되도록 피하자" 에 해당하는 내용입니다. 멤버의 참조자를 반환하는 멤버 함수들의 최대 접근도 class Point { public: Point(int x, int y); ... void setX(int newVal); void setY(int newVal); ... }; struct RecData { Point ulhc; // upper left-hand corner Point lrhc; // lower right-ha..
[Effective C++] #27_캐스팅은 절약하고 또 절약하자! Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 5장 '구현', 항목 27 "캐스팅은 절약, 또 절약! 잊지 말자"에 해당하는 내용입니다. Casting? 우리 말로 "형변환"으로 잘알려진 Casting은, 자료형간의 형변환 혹은 포인터 간의 형변환을 위해 사용됩니다. C언어의 Cast (T) A// A를 Typename으로 캐스트 합니다. T (A)// 함수 방식의 캐스트 class A { public: explicit A (int size); ... }; void doSoemthing(const A& a); doSomething(A(15));/..
[Effective C++] #26_변수 정의 Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 항목은 5장 '구현', 항목 26 "변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘"에 해당하는 내용입니다. 변수 정의 변수를 정의하면 항상 부담해야 하는 비용이 두 가지가 있습니다. 하나는 프로그램 제어 흐름이 변수의 정의에 닿을 때 생성자가 호출되는 비용, 또 하나는 변수가 유효범위를 벗어날 때 소멸자가 호출되는 비용입니다. 변수를 일찍 정의 했을 때 std::string encryptPassword(const std::string& password){ using namespace std; string encryptedPas..
[Effective C++] #25_예외를 던지지 않는 swap Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 항목은 4장 '설계 및 선언', 항목 25 "예외를 던지지 않는 swap에 대한 지원"에 해당하는 내용입니다. Concept namespace std { template void swap (T& a, T& b){ T temp(a); a = b; b = temp; } } CS 전공자라면, 한번쯤 해봤을 "swap"에 대한 구현입니다. 25번 항목은 C++의 STL에 포함된 swap의 효율적인 구현을 목표로 합니다. 먼저, swap은 말 그대로 "값의 맞바꾸기" 입니다. 코드를 통해 swap 알고리즘을 살펴보겠습니다. ..
Hardii2
'언어/Effective C++' 카테고리의 글 목록 (4 Page)