상속받은 기본 매개변수 값은 절대로 재 정의하지 말자 C++에서 상속받을 수 있는 함수: 가상, 비가상 함수 상속되는 함수는 동적으로 바인딩 된다., 기본 매개변수는 정적 바인딩된다. 가상 함수는 동적으로 바인딩되지만, 런타임 효율성 때문에 기본 매개변수 값은 정적으로 바인딩된다. 동적 바인딩은 늦은 바인딩(late binding)이라고도 불리는데, 객체가 실행 시 그 순간의 상태에 따라 일어난다. 프로그래밍에서 변수들은 정수나 문자열 등 형태에 따라 그 변수에 저장되는 값의 저장방법이나 조작방법이 달라진다. 전통적인 컴파일러들이나 어셈블러들은 컴파일 시점에 변수의 형식을 할당하는 정적 바인딩을 제공하였으나, 객체지향 언어들은 실행 시 키보드 또는 기타 다른 소스로부터 값이 변수에 들어오는 그 순간에 변..
상속받은 비 가상 함수는 재정의하면 안 된다 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 31 32 33 34 35 36 37 #include class A { public: void f() { std::cout 총평 public 상속은 is-a 관계입니다. 그리고 비가상 함수는 클래스 파생에 관계없는 불변 동작을 정해주는 것입니다. 즉 불변의 동작을 원하여 만든 함수를 파생 클래스에서 다시 정의하면 이것이 목적이 있어 다시 정의하는 것이라면 결국 비 가상 함수를 쓸 이유가 전혀 없다는 것입니다. 결국. 목적이 있어 다시 정의하는 함수 일 경우에는 가상함수를 쓰는 것 이 좋습니다. 결국에는 비 가상 함수는..
가상 함수 대신 쓸 것들도 생각해 두는 자세를 시시때때로 길러 두자. 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 {...}; // 모든 학생은 사람이지만 모든..
- Total
- Today
- Yesterday
- Linux
- 성산블루버블
- C#
- Build
- ReFS
- DLL
- 블루버블
- 패턴
- C#.NET
- C
- 암호화
- 울릉도
- 윈도우
- 서귀포
- PowerShell
- Thread
- 리눅스
- 현포다이브
- 제주도
- ip
- 블루버블다이브팀
- C++
- 서귀포블루버블
- C# 고급 기술
- 디자인패턴
- 블루버블다이빙팀
- Windows
- OpenSource
- CMake
- 스쿠버다이빙
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |