C++ TIL day 10
·
C++
1. 코딩 스탠다드 코드를 짤때 더 가독성 좋은, 유지보수 할 수 있는 코드를 만들고 싶어서 C++ 코딩 스탠다드에 대해 공부해 보았다.https://gbleem.tistory.com/13 C++ 코딩 스탠다드0. 코딩 스탠다드를 지켜보자코딩을 하다보니 이름 규칙이나 변수명 등을 정리하지 못하고 짓고 있는 것 같아서 이번 과제를 하면서는 코딩 스탠다드를 지켜보자는 생각에 C++ 코딩 스탠다드를gbleem.tistory.com 2. 템플릿ch2 3번 과제를 하던 도중 템플릿을 이용한 클래스를 만드는데, 선언을 .h에 하고 구현을 .cpp에 하니 문제가 발생하였다.이를 해결하고 원인에 대해 공부해 보았다.https://gbleem.tistory.com/14 C++ 템플릿 - 헤더파일에서 구현하자과제를 하던 ..
C++ 템플릿 - 헤더파일에서 구현하자
·
C++
과제를 하던 도중, 템플릿을 사용하여 vector 클래스를 만들고 있는데 .h 파일에서 정의를 하고 .cpp에서 구현을 하였더니 컴파일러가 링크 에러를 띄워주었다. (LNK1120)이 문제점을 분석하고, 찾은 해결책을 정리해 보도록 할 것이다. 1. 템플릿 프로그래밍템플릿은 코드의 재사용성을 높이기 위한 도구이다. 특히 STL에서 큰 힘을 발휘한다.템플릿 프로그래밍의 동작 방식은 컴파일러가 컴파일 시에 알아서 만들어주는 기능이다.즉 컴파일 도중에 템플릿 인스턴스에 대한 코드를 만들어 주게 된다.예를 들어, 우리가 int res = Add(3, 10); 할 때 컴파일러가 코드를 생성함그래서 템플릿에 넣는 자료형의 가짓수에 비례하여, exe 파일도 증가하게 된다.그 결과, 컴파일 타임은 느리지만 런타임 속도..
C++ 코딩 스탠다드
·
C++
0. 코딩 스탠다드를 지켜보자코딩을 하다보니 이름 규칙이나 변수명 등을 정리하지 못하고 짓고 있는 것 같아서 이번 과제를 하면서는 코딩 스탠다드를 지켜보자는 생각에 C++ 코딩 스탠다드를 찾아보게 되었다. 가장 많이 참고한 곳은 https://docs.popekim.com/ko/coding-standards/cpp 이곳의 코딩 스탠다드이고, 언리얼 엔진의 코딩 스탠다드( https://dev.epicgames.com/documentation/ko-kr/unreal-engine/epic-cplusplus-coding-standard-for-unreal-engine?application_version=5.4 ) 또한 참고하였다.  1. 코딩 스탠다드는 왜 지켜야 할까유지보수를 위해서 (가독성)소프트웨어의 총..
C++ TIL day 9
·
C++
1. 과제 풀이과제 깃허브 주소과제1 필수: https://github.com/GBL22M/SCC_CH2-1/blob/main/assignment/Essential.cpp과제1 도전: https://github.com/GBL22M/SCC_CH2-1/blob/main/assignment/Challenge.cpp과제2 필수: https://github.com/GBL22M/SCC_CH2-1/blob/main/assignment/Essential.cpp과제2 도전: https://github.com/GBL22M/SCC_CH2-1/blob/main/assignment/Challenge.cpp1번 과제를 하면서...도전과제에 있어서 sorting 알고리즘을 구현해야 하였기에, 무슨 알고리즘을 구현할까 하다가 Qui..
C++ TIL day 8
·
C++
1. STL 기초1. 기본 컨테이너 벡터기본생성 & 특정값으로 초기화아래 예시처럼 실행하면, row가 3이고 col이 4이며, 모든 값이 7로 대입된 2차원 벡터가 생성된다.vector> vec2d(3, vector(4, 7)); 맵TreeMap(균형잡힌이진트리) 자료구조로 이루어져 있다.Key 순서대로 정렬된다.insert로 삽입하는 경우 중복된 key라면 무시된다. 그러나 [] 연산자를 사용한 경우 새로운 value로 기존의 value를 덮어쓴다#include #include using namespace std;int main() { map myMap; myMap[5] = "E"; myMap[2] = "B"; myMap[8] = "H"; myMap[1] = "A"; m..
Smart Pointer 보충
·
C++
0. Smart Pointer의 메모리 공간스마트 포인터는 힙 메모리 공간과 스택 메모리공간을 모두 사용한다고 한다.스마트 포인터 자체는 스택 메모리 공간에 저장된다.함수 안에서 선언한 스마트 포인터는 함수가 종료되면, 스택에서 사라지고, 메모리도 해제된다아래의 코드를 실행하면, 생성자와 소멸자 모두 호출된다.int main(){ { std::shared_ptr sharedEntity = std::make_shared(); }}그러나 스마트 포인터가 관리하는 실제 리소스는 힙 메모리에 저장된다.아래의 코드처럼 실행하면, std::cin.get(); 이 실행되기 전까지 소멸자가 호출되지 않는다. (좋은 코드는 아닐 것 같음)이유는 e0가 sharedEntity의 값을 공유했기 때..
C++ TIL day 7
·
C++
1. 자원 관리하기1. 스택 메모리메모리 영역이 크지는 않지만, 생존 영역을 벗어나면 자동으로 해제시켜준다.스택 메모리의 생존 주기는 { } 안이다. 밖으로 나가면 해제된다.static 키워드한번 선언되면, 프로그램 종료될 때 소멸된다.함수 안에서 선언한 후 함수가 끝나더라도, 값이 사라지지 않는다.아래 예시의 경우 11, 12, 13, ... , 20 까지 출력된다.#include using namespace std;void func(){ static int a = 10; a++; cout 2. 힙 메모리프로그램 실행 시 동적으로 할당하는 공간은 힙 메모리를 활용하게 된다.new와 delete 연산자를 이용스택 메모리 영역처럼 자동으로 해제되지 않기 때문에, 코드를 짤 때 조심해야 한다.변수 하나의 동..
C++ 상속
·
C++
오늘 배운 내용 중 중요한 부분인 상속을 좀 더 자세히 이해해 보고자, 구글링과 유튜브 영상을 통해 공부한 후 정리한 글이다.1. 상속을 사용하는 이유클래스 간의 관계 설정하여 코드 재사용성 높이기Class Interface Consistency : 일관적인 클래스 인터페이스 구성 가능abstract / interfacepure virtual functionDynamic Function Binding : 동적 바인딩을 사용하기 (C++는 기본적으로 정적 바인딩)virtual functionvirtual table2. 상속 기본 예제 및 접근 지정자아주 간단한 상속 예제상속 받은 클래스는 부모의 함수를 사용할 수 있다.(public 이니까)#include using namespace std;class An..
C++ TIL day 6
·
C++
1. 프로그래밍 기초Visual Studio 단축키컴파일 CTRL + F7실행 F5값의 전달일반 변수 전달: 변수를 복사하기 때문에 원본의 값은 변하지 않는다.배열의 값 전달: 배열의 경우 배열의 첫번째 위치의 값이 들어있는 주소가 전달되기 때문에 원본의 값을 바꿔준다.참조자를 이용한 전달: 실제 변수의 값 변경#include using namespace std;//일반 변수 전달void ChangeValue(int x){ x = 100;}int main(){ int num = 1; cout #include using namespace std;//배열의 값 전달void ChangeArrayValue(int board[], int size){ if (size >= 0) board[0..