C++

[Effective C++] # 생성자, 소멸자, 복사 생성자, 복사 대입 연산자 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 5 "C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자"에 해당하는 내용입니다. 생성자, 소멸자, 복사 생성자, 복사 대입 연산자 class Empty {}; 위 예제 코드는 비어 있는 클래스를 정의했습니다. 하지만, C++는 비어 있는 클래스 안에 몇 개의 멤버 함수를 자동으로 생성합니다. 이 멤버 함수들은 "생성자", "소멸자", "복사 생성자", 그리고 "복사 대입 연산자"입니다. 이들은 모두 public 멤버이며, inl..
[Effective C++] #4 객체의 초기화 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 1장 'C++ 기본', 항목 4 "객체를 사용하기 전에 반드시 그 객체를 초기화하자"에 해당하는 내용입니다. 초기화 int x; double x; class Point {...}; Point p; ********************* int x = 0; double x = 0; 위 예제 코드를 살펴보겠습니다. C++의 경우, 어떤 상황에서는 변수의 값이 초기화되기도, 그렇지 않기도 합니다. 대부분의 경우, 무작위 비트의 값을 읽어 객체의 내부가 알 수 없는 이상한 값을 갖게 되죠. C++의 vector의 원소는 확실히 ..
[Effective C++] #3_const 사용 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 1장 'C++ 기본', 항목 3 "낌새만 보이면 const를 들이대 보자!"에 해당하는 내용입니다. #0. const의 정의 char sayHello[] = "Hello!"; const char *p = sayHello;//포인터가 가리키는 데이터를 상수화 char* const p = sayHello;//포인터가 상수화 const char* const p = sayHello;// 둘 다 상수화 "const" 키워드가 붙은 객체는 외부 변경을 불가능하게 합니다. 따라서, 객체의 내용이 불변이어야 한다는 소스코드 제작자의 ..
[Effective C++] #2_#define 사용의 대안 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 1장 'C++ 기본', 항목 2 "#define을 쓰려거든, const, enum, inline을 떠올리자"에 해당하는 내용입니다. 1. #define, 매크로 const, 상수 #define ASPECT_RATIO 1.653 const double AspectRatio = 1.653; "#define" 사용의 경우 소스코드가 컴파일러에게 넘어가기 전, 선행 처리자가 "이름"을 밀어버리고, 숫자 상수로 바꾸어버립니다. 결과적으로, "ASPECT_RATIO"는 컴파일러가 사용하는 기호 테이블에 들어가지 않습니다..
[Effective C++] #33_오버 라이딩 문제 Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 6장 '상속 그리고 객체 지향 설계', 항목 33 "상속된 이름을 숨기는 일은 피하자"에 해당하는 내용입니다. 유효 범위, Scope int x; void someFunc() { double x; std::cin >> x; } 먼저, 유효범위에 대해 알아보겠습니다. std::cin을 실행하여 값을 입력받을 "x"변수는 가장 위에 선언한 "int x"일까요, someFunc 함수 내부에 선언된 "double x"일까요? 답은 지역 변수 "double x"입니다. 이유는 안쪽 유효범위, 즉 "void someFunc(..
[Effective C++] #32_Public 상속 Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 6장 '상속 그리고 객체 지향 설계', 항목 32 "Public 상속 모델은 반드시 ~는~의 일종이다"에 해당하는 내용입니다. Public 상속의 의미 class Person {...}; class Student: public Person {...}; "Public 상속은 is-a(...는...의 일종이다)" 클래스 B를 클래스 A로부터 public 상속을 통해 파생시켰다면, B 타입으로 만들어진 모든 객체는 또한 A 타입의 객체이지만, A 타입으로 생성된 모든 객체는 B 타입의 객체가 아닙니다! 쌍방 관계가 성립..
[Effective C++] #28_예외 안전성 확보 Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 5장 '구현', 항목 31 "파일 사이의 컴파일 의존성을 최대로 줄이자"에 해당하는 내용입니다. 인터페이스와 구현 사이의 컴파일 의존성 #inlcude #include "data.h" #include "address.h" class Person { public: Person(const std::string& name, const Date& birthday, const Address& addr); std::string name() const; std::string birthDate() const; std::strin..
[Effective C++] #28_예외 안전성 확보 Scott Meyers의 "Effective C++" 를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 5장 '구현', 항목 30 "인라인 함수는 미주알고주알 따져서 이해해 두자" 에 해당하는 내용입니다. 인라인 함수 인라인 함수는 함수 호출 시 발생하는 오버헤드를 줄이기 위해 함수를 호출하는 대신 함수가 호출되는 곳마다 함수 본문의 코드를 복사해 넣어 주는 방법입니다. 함수처럼 보이고, 함수처럼 동작하며, 메크로보다 훨씬 안전하고 쓰기 좋습니다. 책에서 얘기하는 '인라인 함수'의 장점은 이와 같습니다. 컴파일러 최적화는 함수 호출이 없는 코드가 연속되어 이어지는 구간에 적용되도도록 설계되어있고, 인라인 함수를 사용..
[DirectX12] #Part 2 - Direct 3D 기초 "DirectX12를 이용한 3D 게임 프로그래밍 입문" 서적의 Part 2, "Direct3D의 기초"에 해당하는 내용입니다. 현재, 게임 개발에 입문하여 기초지식을 습득하여 기록하기 위함이며, 개념 이해와 예제코드 작성을 진행. 명령 대기열(Command Queue)과 명령 목록(Command List) GPU에는 명령 대기열이 있습니다. CPU는 그리기 명령어들이 담긴 명령 목록을 Direct3D API를 통해 그 대기열에 제출합니다. 하지만, CPU가 명령들을 명령 대기열에 제출했다고 해도, GPU는 그 명령들을 즉시 실행하지 않습니다! 여기서 우리가 알아야 할 점은 게임 같은 고성능 응용 프로그램의 목표는 가용 하드웨어 자원을 최대한..
[DirectX12] #Part 2 - Direct 3D 기초 "DirectX12를 이용한 3D 게임 프로그래밍 입문" 서적의 Part 2, "Direct3D의 기초"에 해당하는 내용입니다. 현재, 게임 개발에 입문하여 기초지식을 습득하여 기록하기 위함이며, 개념 이해와 예제코드 작성을 진행. 상주성? Direct3D 12에서 응용 프로그램 자원을 GPU 메모리에 올리고, 또 내리며 자원의 상주성을 관리합니다. 즉, 여기서 "상주성"이란 응용 프로그램 자원이 GPU 메모리에 들어있는지의 여부를 뜻합니다. 메모리를 다루는 만큼, 상주성 관리의 요점은 응용 프로그램이 사용하는 GPU 메모리의 양을 최소화하는 것입니다. 예를들면, 야외의 '숲'과 '동굴'을 배경으로 한 게임에서, '동굴'에 들어간 사용자는 '..
Hardii2
'C++' 태그의 글 목록 (38 Page)