상속된 이름을 숨기는 일은 피하자. 파생 클래스의 이름은 기본 클래스의 이름을 가린다. Scope (유효 범위) 1 2 3 4 5 6 int x; // 전역 변수 void someFunc() { double x; // 지역 변수 std::cin >> x; // 입력을 받아, 지역 변수 x에 새 값을 읽어 넣음 } Colored by Color Scripter cs *안쪽 유효 범위에 있는 이름이 바깥쪽 유효범위에 있는 이름을 가림 상속 부모 클래스에 속해 있는 것을 자식 클래스 멤버 함수 안에서 참조하는 문장이 있으면 컴파일러는 참조 대상을 바로 찾아낼 수 있음 자식 클래스의 유효 범위가 부모 클래스의 유효 범위 안에 중첩되어있음 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17..
상속 모형은 반드시 "is-a" • 클래스 D(Derived)를 클래스 B(Base)로부터 public 상속을 통해 파생시켰다 • D 타입으로 만들어진 모든 객체는 또한 B 타입의 객체이지만, 그 반대는 되지 않음 • B 타입의 객체가 쓰일 수 있는 곳에는 D 타입의 객체도 마찬가지로 쓰일 수 있다고 단정 • D 타입이 필요한 부분에 B 타입의 객체를 쓰는 것은 불가능 • 모든 D는 B의 일종이지만, B는 D의 일종이 아님 • C++는 public 상속을 이렇게 해석하도록 문법적으로 지원 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Person {...}; class Student: public Person {...}; // 모든 학생은 사람이지만 모든..
파일 사이의 컴파일 의존성을 최대로 줄이자. 클래스 하나만 추가해서 빌드를 했더니 건들지도 않은 부분도 컴파일되고 다시 링크된다. C++가 인터페이스와 구현을 깔끔하게 분리하지 못하기 때문입니다. C++의 클래스 정의는 클래스 인터페이스만 지정하는 것이 아니라 구현 세부사항까지 지정하고 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Person { public: Person(const std::string&name, const Date& birthday, const Address& addr); std::string name() const; std::string birthDate() const; std::string address() const; private:..
인라인 함수는 미주알고주알 따져서 이해해 두자 인라인 함수의 정의 함수 호출 문을 그 함수의 본문으로 바꿔치기하는 함수. 컴파일러에 대한 개발자의 요청으로 무시될 수도 있다. inline 함수 1 2 3 4 5 6 7 8 9 10 11 12 13 inline void foo() { cout 잘못된 인라인은 예외 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Base { public: private: std::string bm1,bm2; }; class Derived : public Base { public: Derived() {} // 비어 있지만 컴파일러가 만들어 내는 코드가 있다. private: std::string bm1,bm2,bm3; }; Colored by Color ..
예외 안전성이 확보되는 그날 위해 싸우고 또 싸우자! 예외 안전성이란 무슨 말인가? "예외적 상황에 대해서 안전한가?"에 대한 말이다. 왜 확보해야 하는가? 코딩중에 컴파일타임에 에러를 다 찾아내면 좋겠지만, 컴파일 타임에 찾지 못하는 에러들은 정말 찾기가 힘들어진다. 그렇기 때문에, 예외적 상황에 대해서 대처를 해야지만 디버깅이 용이해지고, 프로그램 자체도 더 견고해지기 때문에 확보해야 한다. 함수들의 예외 안전성은 어떻게 동작해야 하는가? 1. 자원이 절대 새도록 만들지 않는다. 2. 자료구조가 더렵혀지는 것을 허용하지 않는다. 그렇다면, 예외 안전성을 갖춘 표준 보장은 무엇인가? 1. 기본적인 보장(basic guarantee) : 예외 발생에 있어, 자원 누수를 시키지 않겠다는 보장 2. 강력한 ..
내부에서 사용하는 객체에 대한 ‘핸들’을 반환하는 코드는 되도록 피하자 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 //점을 나타내는 클래스 class Point { public: void setX(int newVal); void setY(int newVal); }; //Rectangle에 쓰기 위한 점 데이터 struct RectData { Point ulhc; //ulhc = “좌측 상단(upper left – hand corner)” Point lrhc; //lrhc = “우측 하단(lower right – hand corner)” }; class Rectangle { private: std::tr1::shared_ptrpData; //tr1::shared_ptr..
- Total
- Today
- Yesterday
- C#.NET
- CMake
- 스쿠버 다이빙
- Windows
- 현포다이브
- 서귀포
- 블루버블
- 울릉도
- OpenSource
- C
- 성산블루버블
- 스쿠버다이빙
- 암호화
- PowerShell
- 제주도
- Effective c++
- effective
- 블루버블다이빙팀
- 블루버블다이브팀
- Linux
- 서귀포블루버블
- C#
- 네트워크 정보
- DLL
- C++
- 외돌개
- C# 고급 기술
- Build
- 패턴
- script
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |