가상 함수 대신 쓸 것들도 생각해 두는 자세를 시시때때로 길러 두자. 1) 비가상 인터페이스 관용구(non-virtual interface)를 사용하자. - 공개되지 않은 가상 함수를 비가상 public 멤버 함수로 감싸서 호출하는, 템플릿 메서드 패턴의 한 형태 - NVI에서 가상 함수가 엄격하게 public 일 필요는 없다. - 장점 : 가상 함수가 호출되기 전에 어떤 상태를 구성하고 가상 함수가 호출된 후에 그 상태를 없애는 작업을 래퍼를 통해 공간적으로 보장된다. *비가상 인터페이스 관용구(non-virtual interface)란? - 사용자로 하여금 public 비가상 멤버 함수를 통해 private 가상 함수를 간접적으로 호출하게 만드는 방법. - 관용구에 쓰이는 비가상 함수는 가상함수의 래..
인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자. 인터페이스 상속과 구현 상속은 무엇을 의미하는가? 기본 클래스의 멤버 함수의 상속 방법을 두고 하는 말이다. 인터페이스 상속과 구현 상속의 차이점은 무엇인가? 인터페이스 상속이란, 순수 가상 함수의 상속을 말한다. 구현 상속이란, 가상 함수와 비가상 함수의 상속을 말한다. 각 함수들은? 순수 가상 함수 : 가상 함수이나, 함수의 정의 부분이 없고, 선언 부분만 있는 함수 가상 함수 : 파생 클래스에서 가상 함수를 받는 함수가 없다면, 기본 클래스 함수가 호출되고 있다면, 파생 클래스의 가상 함수를 호출시켜주는 매체가 되는 함수 비 가상 함수 : 일반 멤버 함수, 예제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17..
상속된 이름을 숨기는 일은 피하자. 파생 클래스의 이름은 기본 클래스의 이름을 가린다. 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 ..
- Total
- Today
- Yesterday
- Build
- 서귀포블루버블
- 블루버블다이빙팀
- C++
- 제주도
- DLL
- PowerShell
- 울릉도
- script
- 블루버블다이브팀
- 패턴
- 스쿠버다이빙
- 현포다이브
- 암호화
- C
- CMake
- Windows
- 서귀포
- effective
- C#
- Effective c++
- 성산블루버블
- 네트워크 정보
- C#.NET
- 스쿠버 다이빙
- 외돌개
- 블루버블
- OpenSource
- C# 고급 기술
- Linux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |