일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- implicit conversion
- exception
- 상속
- 반복자
- 스마트 포인터
- 암시적 변환
- effective stl
- resource management class
- 메타테이블
- operator new
- 게임
- reference
- virtual function
- Effective c++
- more effective c++
- Smart Pointer
- 영화
- 비교 함수 객체
- UE4
- 오블완
- 예외
- 영화 리뷰
- lua
- 다형성
- c++
- 참조자
- Vector
- 루아
- 언리얼
- 티스토리챌린지
- Today
- Total
목록virtual function (4)
스토리텔링 개발자
항목 25. 생성자 함수와 비멤버 함수를 가상 함수처럼 만드는 방법 가상 생성자(virtual constructor) : 생성자 함수를 가상 함수처럼런타임에 타입을 체크하겠다(가상) + 명확한 타입의 객체에 대한 메모리 할당(생성자) 가 어떻게 양립 가능할까?하지만 가능한 일이다. 게다가 비일비재하게 사용한다.class NLComponent // 추상 기본 클래스{public: ... // 순수 가상 함수가 최소한 하나는 있다.};// 순수 가상 함수가 없는 하위 클래스들class TextBlock : public NLComponent { ... };class Graphic : public NLComponent { ... };class NewsLetter // 뉴스레터{public: New..
항목 24. 가상 함수, 다중 상속, 가상 기본 클래스, RTTI에 들어가는 비용을 제대로 파악하자 가상 함수C++ 언어는 어떻게 구현되었느냐에 따라 객체의 크기와 멤버 함수의 속도가 현저히 변한다.그 중 가장 큰 영향을 끼친다고 볼 수 있는 것이 바로 가상 함수이다.가상 함수는 가상 테이블(vtbl, virtual table) 및 가상 테이블 포인터(vptr, virtual table pointer)로 구현한다.그리고 이 두 가지가 성능에 가장 큰 쟁점이 된다. 가상 테이블(vtbl, virtual table)가상 함수를 포함하는 클래스가 가지는 함수 포인터의 배열을 말한다.가상 함수를 선언 혹은 상속받은 클래스(클래스 인스턴스가 아님!)에 반드시 생긴다.가상 테이블은 해당 클래스의 가상 함수 함..
항목 35. 가상 함수 대신 쓸 것들도 생각해 두는 자세를 시시때때로 길러두자. 가상 함수 버전class GameCharacter{public: virtual int healthValue() const; // 캐릭터의 체력 가상 함수 ...};가상 함수 외의 방법으로 구현할 수는 없을까? 비가상 인터페이스(NVI) 관용구를 통한 템플릿 메서드 패턴class GameCharacter{public: int healthValue() const // 비가상 인터페이스 { ... int retVal = doHealthValue(); ... return retVal; } ...private: virtual int doHe..
항목 9. 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 파생 클래스에서 호출되는 기본 클래스 생성자 문제기본 클래스 생성 중엔 가상 함수가 먹히지 않는다.기본 클래스의 생성자가 호출될 동안, 가상 함수는 절대로 파생 클래스로 내려가지 않는다.기본 클래스 부분이 생성되는 중엔 객체의 타입이 기본 클래스로 인지된다.가상함수가 기본 클래스의 것으로 호출된다.런타임 타입 정보를 사용하는 언어 요소(dynamic_cast, typeid 등)에서도 기본 클래스 타입의 객체로 취급한다.#include #include class A{public: A(){ std::cout 기본 클래스에서는 파생 클래스의 데이터가 아직 초기화되지 않았으므로 없었던 것처럼 취급하는 것이 안전하다..