일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UE4 커스텀로그
- 정렬
- moreeffectiveC++
- 강참조
- UML관련
- enumasByue
- 정렬알고리즘
- 크리티컬섹션
- C++
- 언리얼가비지컬렉터
- 람다사용정렬
- 프로그래머스
- 알고리즘
- 데이터애셋
- 스마트포인터
- 언리얼엔진구조체
- 애셋로드
- 람다
- unorder_map
- 약참조
- map
- dataasset
- BFS
- 델리게이트
- UELOG
- stl
- 자료구조
- C++최적화
- UE_LOG
- 선택정렬
- Today
- Total
목록C & CPP/Fundamental C++ (12)
기억을 위한 기록들
타입 변환의 기초 클래스 타입 변환을 알아보기 전에 타입 변환의 기초를 살펴보면, int main() { int a = 5; double d1 = a; double d2 = (double)a; double d3 = (double&)a; cout
다중 상속이 어떤 것이고, 어떻게 하는지 등 자세한 설명은 생략한다. 다중 상속의 메모리 구조 한 클래스(Child) 가 두 개의 클래스(A, B)를 상속받게 될 때, 첫 번째로 상속받는 클래스(A)의 시작 주소는 자식 클래스(Child)의 시작 주소와 동일하다. class ParentA { public: ParentA() { mAInt = 5; } int mAInt; }; class ParentB { public: ParentB() { mBInt = 10; } int mBInt; }; class Child : public ParentA, public ParentB { public: Child() { mInt = 100; } int mInt; }; Child 클래스의 객체 child의 주소를 A, B, ..
타입 변환 연산자 클래스에서 타입 변환 연사자를 사용하려면 아래와 같다. operator TYPE() { //변환코드 } 간단한 예를 들어서 어떤 문자열을 입력받으면 자동으로 해당 문자열의 길이를 출력해보도록 하자. #include #include using namespace std; class MyClass { public: MyClass(string& str) { mLength = str.length(); } operator int() //타입변환 연산자 { return mLength; //문자열길이 반환 } int mLength; }; int main() { string helloStr = "Hello"; MyClass a(helloStr); int length = a; //타입변환 연산자 cout
등가 연산자 좌변 우변이 같은지, 다른지(==, !=)를 평가하는 연산자이다. 등가라는 개념은 대입이라는 개념과 함께한다. int a = 3; int b = 3; if(a == b) //ok { std::cout
생성자와 소멸자 클래스 객체가 생성될때 생성자가 호출하고, 사라지기 직전에 소멸자가 호출된다. 따라서 초기화작업이나 자원 마무리를 각각 생성자와 소멸자에서 처리해주면 된다. 암시적 생성자와 소멸자 컴파일러는 생성자나 소멸자가 특별히 필요하지 않다면 굳이 암시적으로 생성자,소멸자를 정의하지 않는다. 하지만, 명시되어있지 않지만, 반드시 필요한 경우라면 컴파일러는 암시적인 생성자와 소멸자를 정의한다. 암시적으로 생성되는 예) #include using namespace std; class A { public: A() { cout
클래스 이전에 구조체가 있었다. 구조체 멤버의 기본 접근 지정자는 public이고 클래스의 접근 지정자는 private으로 되어있다. 왜 그런 걸까? 하고 보면 원래 C언어에서 먼저 구조체가 만들어졌고, 접근 지정자의 개념이 없었다. 그러다 C++ 이 추가되고 캡슐화 및 정보은닉의 개념을 구현하기 위해 도입된 것이다. 구조체는 처음부터 외부에서 자유롭게 접근되었기에 기본 접근 지정자는 public인것이고 클래스는 private인 것이다. 클래스의 메모리 구조 클래스를 이해한다는 것은 클래스의 메모리 구조를 이해하고 컴파일러가 어떻게 그 구조를 이용하는지를 아는 것이 거의 전부라고 할 수 있다. 어떤 클래스로 예를 보자 class CTest { public: int mInt; char mChar; stat..
함수에서의 배열 전달 #include #include using namespace std; int DoSomething(int arr[]) { arr[0] = 1; arr[1] = 2; arr[2] = 3; return sizeof(arr); } int main() { int myArr[3] = { 0 }; int s = DoSomething(myArr); for (auto value : myArr) { cout
- 메모리의 주소를 가리키는 객체를 포인터라고 부른다. - 메모리 블록은 주소, 크기, 상태의 정보를 가지고 있다. - 메모리 블록을 쉽게 관리할 수 있도록 포인터에는 주소뿐 아니라 타입 정보까지 들어가게 되었다. 타입 정보를 통해 메모리 주소로부터 타입 크기만큼 블록에 값을 읽거나 쓸 수 있게 된 것이다. 포인터 타입 - int 타입 객체를 기리 키기 위해 int* 타입 포인터를 사용하는 것이 쉽게 편해서 장점이 많다는 것이지, 반드시 int* 을 사용해야만 하는 것은 아니다. 필요에 따라 다른 타입이 int타입을 가리킬 수도 있다. 같은 경우 int a = 0; int* ptr = &a; *ptr = 3; //역참조 값 변경 std::cout
가상메모리 핵심은 각각의 프로세스에게 메모리 공간이 독립적으로 부여된다는 것. 개별 프로세스는 부여받은 메모리 영역은 해당 프로세스만이 접근할 수 있도록 보호된다. 독립적으로 부여되어 타 프로세스가 해당 메모리 영역을 침범할 수 없고, 안정성을 크게 향상 가상메모리의 크기 x86는 32비트 시스템이다. 주소를 가리킬 수 있는 레지스터의 크기가 32비트라는 의미. 이론적으로 2의 32승인 대략 42억 개의 주소가 나오고 각각의 주소가 1바이트씩 가리킬 수 있으므로 각각의 프로세스는 4GB의 메모리를 부여받고, 윈도우의 경우 부여된 4GB의 절반은 운영체제가 사용. 나머지 2GB만 사용가능하게 된다. x64는 64비트 시스템이며 레지스터의 크기가 64비트이므로 이론적으로는 2의 64승 개의 주소를 사용할수 ..
빌드는 크게 3단계로 나뉜다. 1. 전처리 2. 링크 3. 컴파일 정적 라이브러리를 생성하는 경우는 링크 과정이 필요하지 않다. 최종 목적의 바이너리를 만들어내기 위해 거치는 과정(전처리, 컴파일, 링크 등) 모두를 '빌드'라고 한다. 컴파일 컴파일의 대상은 소스 파일 즉, cpp파일이다. 헤더 파일(. h)은 컴파일의 대상이 아니다. 헤더파일은 특정 cpp파일 안의 #include 구문에 의해 포함될이다. 특정 cpp 파일이 컴파일되면서 #include에 의해 포함된 헤더 파일의 내용이 같이 컴파일되는 것뿐이다. 즉 헤더 파일은 단독으로 컴파일되지 않는다. 소스파일이 컴파일되면 목적(object)파일이 생성된다. 소스 파일과 목적 파일은 일대일 대응관계라고 할 수 있다. 소스파일이 사람이 이해하는 파일..
정의 해당 객체를 위해 메모리 영역을 확보하는 것 클래스 정의 : class CTest { public: int a; int b; }; 선언 어떤 객체가 존재하고 있음을 알리는 역할 class CTest; //선언 CTest myTest;//사용 정의는 선언을 포함한다. 어떤 객체를 정의하는 순간 해당 객체는 알려지므로 선언을 따로 해줄 필요가 없다. 그렇다고 선언이 불필요한 것은 아니다.(전방 선언 등) - 같은 이름의 전역 변수는 실행 공간에 오직 단 한 번만 정의될 수 있다. //A.cpp int g_ValA; //Ok int g_ValCommon; //Link Error //B.cpp int g_ValB; //Ok int g_ValCommon; //Link Error - 같은 이름의 정적(stat..
c++를 그래도 나름 공부했다고 생각하고, 이펙티브 c++를 보며 공부하다가 그 사이에서도 이전에 간과하거나, 애매하게 아는 부분들을 다시 공부해보고 싶어서 추천받아 산 책이다. 이책하고 이펙티브C++책하고 같이 볼것같다. 참고한 책 : www.yes24.com/Product/Goods/16362643?OzSrank=1 Fundamental C++ 프로그래밍 원리 이 책은 C++ 프로그래밍의 문법과 사용 방법보다는 C++ 그 자체에 초점을 두었다. 즉, C++ 프로그래밍이 어떤 구조와 원리에 의해서 이루어지는지를 집중적으로 설명하는데 주안점을 두었다. 따라 www.yes24.com 해당 책을 보며 간단하게 요약하며, 디테일한 부분은 제외하였습니다.