분류 전체보기

[Basic C++] #21_가상 상속 C++ 개발에 사용되는 "가상 상속"개념에 대해 알아보겠습니다. Overview 개념 코드 #0. 개념 class Animal { public: virtual void eat() = 0; virtual void sleep() {cout
[Basic C++] #20_virtual 키워드, vtable 오버헤드 C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. virtual 키워드 사용 이유 Java 언어는 모든 메소드를 무조건 virtual로 취급합니다. 이처럼, C++에서도 모든 메소드를 virtual로 취급하면 더 편리하지 않을까 생각합니다. 그럼에도 불구하고, "virtual" 키워드의 강조는 "vtable" 이용에 따른 오버헤드때문입니다. "virtual" 메서드, 즉 가상 멤버 함수 호출을 위해 "vtable"이 담고 있는 포인터를 역 참조하여 실행할 메서드의 위치를 찾아오는 부가적인 작업이 필요합니다. 물론, 날로 발전..
[Basic C++] #18_오버라이딩의 특수한 경우 여섯 번째, 일반 메서드의 오버라이딩 C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. virtual의 내부 구현 "virtual" 키워드의 내부 구현에 대해서 알아보겠습니다. 컴파일러가 클래스의 정의 코드를 컴파일하면, 모든 멤버들이 들어 있는 바이너리 객체를 생성합니다. 이때, "virtual" 메서드가 아닌 경우, 호출 시 제어권의 전달이 컴파일 타임에 맞추어 직접 하드코딩됩니다. 반면에, "virtual" 메서드일 경우, 컴파일러는 "vtable"이라고 부르는 특별한 메모리 영역을 찾아보게 됩니다. "virtual" 메서드를 멤버로 갖고..
[Basic C++] #18_오버라이딩의 특수한 경우 여섯 번째, 일반 메소드의 오버라이딩 C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. "virtual"을 사용하지 않을 경우 class Super { public: void go() {cout
레이 트레이싱 레이 트레이싱(Ray Tracing)은 빛의 움직임을 현실적으로 만드는 기법으로, 오픈 월드 게임 내 유저들에게 몰입감을 선사합니다. 레이 트레이싱 개념과 관련 기술들을 기사의 내용을 토대로 간단하게 정리해보겠습니다. 레이 트레이싱이란? 레이 트레이싱(Ray Tracing)은 그래픽 렌더링 기법으로 빛의 물리 현상을 모방합니다. 레이 트레이싱은 높은 퍼포먼스를 보여주는 한편, GPU에 큰 부담을 주어 Overhead와 Cost 문제가 존재합니다. 레스터라이제이션? 레스터라이제이션(Rasterization)은 전통적으로 사용되는 그래픽 렌더링 기법으로 벡터 그래픽 형식으로 묘사되는 이미지를 픽셀 이미지로 변환합니다. 레스터라이제이션은 속도가 빠르며, 자원 소비량이 적어 효율적입니다. 반면에,..
[Basic C++] #17_오버라이딩의 특수한 경우 네 번째, 디폴트 인자 값 C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. 파생 클래스에서 '명시적'으로 복제 생성자를 정의할 경우 // 슈퍼 혹은 베이스 클래스 class Super { public: Super(); Super(const Super& _super); }; // 서브 혹은 파생 클래스 class Sub : public Super { public: Sub(); Sub(const Sub& _sub); }; // 파생 클래스의 복제 생성자 Sub::Sub(const Sub& _sub) : Super(_sub) {} 클래스 안에서 동..
#1. 개념 1. 디폴트 인자 활용 가상 함수를 오버라이딩?class Super{protected: virtual void SomeFunc(int val = 3) { cout 만약, Super 유형의 포인터를 Sub 유형의 객체를 가리키고, 가상 함수를 호출할 경우, Sub 유형의 가상 함수가 호출됩니다. 하지만! 가상 함수가 '디폴트 인자'를 활용할 경우, 직접 코드에서 활용하는 포인터 혹은 참조의 유형이 어떠한 함수를 호출할 것인지 결정하는 요소가 됩니다.   #2. 코드 class Super{public: virtual void go(int i=2) { cout Super super;Sub sub;Super& superRefToSub = sub;super.go(); /..
[Basic C++] #15_오버라이딩의 특수한 경우 세 번째 C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. private 또는 protected 가상 멤버 함수를 오버라이드 할 경우 class Times { public: virtual int getTimesResult() const {return getDeafualtOperand() * getInputOperand;}// 디폴트 Operands 값 * 인자로 들어온 operands void setInputOperand (int i) {inputOperand = i;} void getInputOperand () {reutrn inputOper..
[Basic C++] #14_오버라이딩의 특수한 경우 두 번째 C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다. "전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다. 오버로딩 된 가상 함수를 오버라이딩 할 경우 class Suepr { public: virtual void Overload() {...} virtual void Overload(int i) {...} }; class Sub : public Super { public: virtual void Overload() {...} }; 특정 프로토타입을 가지는 가상 함수를 오버라이딩 하면 파라미터와 관계없이 같은 이름을 가지는 부모 클래스의 모든 함수가 숨겨지게 됩니다. 쉽게 말해서, 특정 프로토..
#1. 개념 1. static 함수의 오버로딩class Super{public: static void StaticMethod() {cout 먼저, static 멤버 함수의 오버라이딩은 불가능하지만(static 가상 함수부터가 불가능),  static 멤버 함수의 오버로딩은 가능합니다.이때, static 멤버 함수는 정의된 클래스에 종속되어, 같은 이름의 멤버 함수 호출 시 참조된 클래스에 맞추어 실행됩니다. 따라서, 해당 함수는 호출 시 객체가 무엇이든 관계없이 접근하는 타입에 맞추어 직관적으로 어떤 static 멤버 함수를 호출할지 결정합니다.
Hardii2
'분류 전체보기' 카테고리의 글 목록 (47 Page)