묻공러
'C++/[노코프] C++' 카테고리의 글 목록

C++/[노코프] C++

C++/[노코프] C++

[C++ NOTE] Exceptions

01. Exception C는 Exception이 없어서 모든 에러를 return과 &argument로 해결한다 C++는 std::optional, std::variant, std::tuple/pair를 통해 해결한다 그리고 에러를 handling 하는 Exception 개념이 도입되었다 을 인클루드 하고 try, catch, throw를 통해 사용한다 error의 종류에 따라 다양한 exception의 자식 클래스들을 활용할 수 있다 #include #include int divide(int a, int b) { if (b == 0) { //throw std::exception(); throw std::runtime_error("divide by 0"); } return a / b; } int main..

C++/[노코프] C++

[C++ NOTE] Types

01. Floating Numbers 1 # 변환 방법 float은 아래와 같은 방법으로 변환된다 # converter 위에서 사용되는 이진법 부동소수점 정의에 스탠다드는 IEEE 754이고 해당 변환을 직접적으로 보여주는 사이트를 활용해서 내부를 확인할 수 있다 02. Floating Numbers 2 # 주의점 float은 근삿값으로 변환이 되기에 equality, comparison을 사용하는 것에 주의해야 한다 double은 float보다는 더욱 정밀하지만 마찬가지로 주의해야 한다 #include #include #include #include int main() { const float num1 = 0.3f; const float num2 = 0.4f; if (0.7f == num1 + num2..

C++/[노코프] C++

[C++ NOTE] Functional Programming

01. Introduction C++는 함수형 프로그래밍을 지원하지만 OOP 중심의 언어이다 C++ 17부터 Lambda Function이 도입되면서 함수형 프로그래밍을 쉽게 사용할 수 있도록 바뀌었다 함수형 프로그래밍의 기본은 함수를 변수처럼 다루는 것으로부터 시작된다 java script의 closure개념과 같은 Function Object를 C++에서 아래와 같이 구현할 수 있다 #include class Plus { public: explicit Plus(int a) : localVar{ a } { } int operator()(int x) const { return localVar + x; } private: int localVar; }; int main() { Plus plus3{ 3 }; ..

C++/[노코프] C++

[C++ NOTE] Template

01. Introduction # Template의 종류 Function template Class template Aliasing template Variable template C++ 20부터 Template에 concept이 도입되면서 템플릿 프로그래밍 시 실수를 줄여준다 # Function template 함수의 인자 타입에서 함수 오버로딩을 제공하는 경우 가장 유용하게 사용된다 템플릿 함수는 미리 모든 것이 만들어지는 것이 아니라 넘겨지는 인자의 타입에 따라서 그때 함수들을 생성하며 컴파일이 되고 문제가 생기면 컴파일 에러가 발생한다 # Function template의 instantiation Function template은 코드로 존재하다가 사용을 할 때, 그 타입에 맞는 함수가 컴파일이 ..

C++/[노코프] C++

[C++ NOTE] Smart Pointer

01. Smart Pointer # RAII 스마트 포인터를 사용하는 이유는 RAII(Resource Acquisition Is Initialization)이다 RAII는 오브젝트와 리소스의 Life Cycle을 일치시키는 것을 의미하고 여기서 리소스란 Heap memory, Thread, file access, mutex, db Connection과 같은 한정된 리소스를 의미한다 RAII 중 Heap Memory(리소스)를 관리해 주는 스마트포인터(오브젝트)를 통해 Memory Leak을 근본적으로 없앨 수 있다 # Memory Leak new를 통해 힙메모리에 데이터를 할당하고 delete를 해주지 않고 프로그램이 종료된다면, 스택에서 포인터만 없어지고 힙에 할당된 데이터는 영원히 남게 되고 이를 M..

C++/[노코프] C++

[C++ NOTE] Inheritance

01. Inheritance Intro # 기본적인 개념 1) Class relationship 2) Code reuse 3) Class Interface Consistency : abstract / interface, pure virtual function 4) Dynamic function binding : virtual function, virtual table # 접근 권한 키워드 (private, public, protected) 접근 권한 키워드는 멤버 변수 및 함수에 작성하는 경우와 상속 권한에 작성하는 경우가 있다 멤버 변수 및 함수에 작성하는 경우에 주의점은 private 멤버 변수에 접근하려면 public 멤버 함수를 통해서 접근 가능하다는 것이다 상속 권한에 작성하는 경우에는 아래와 ..

C++/[노코프] C++

[C++ NOTE] OOP

01. OOP Intro # Multi paradigm C++은 Multi paradigm 언어이다 그 종류는 아래와 같다 1) Procedural 2) Functional 3) OOP 4) generic # Class와 Object OOP에서 Class는 Definition이고 이러한 Class를 통해 Object가 생성된다 아래의 예시에서는 Cat이 Class이고 kitty가 Object이다 class Cat { public: void speak(int name); void speak(float weight); private: int mAge; }; int main() { Cat kitty; kitty.speak(); Cat nabi; nabi.speak(); } # C++를 OOP중심의 언어로 만들..

C++/[노코프] C++

[C++ NOTE] Resource Move

01. Pointer vs. Reference 값, 포인터, 참조를 통해 전달하는 3가지 방식이 존재한다 값으로 전달을 하면 데이터를 전체 다 복사해야 한 경우가 발생한다 따라서, 포인터와 참조를 통해 전달하는 것이 효율적이다 둘의 차이는 내부적으로 없으며 참조의 경우는 const와 함께 작성해서 값을 변경하지 못하도록 막는 경우가 많다 void fooV(std::array a) { int b = a+1; }; void fooP(int * ap) { int b = *ap+1; }; void fooR(const int & a) { int b = a+1; a =100; }; 02. L-Value vs. R-Value # L-Value vs. R-Value R-Value는 한 번만 사용되고 더 이상 불려지거나..

C++/[노코프] C++

[C++ NOTE] Compile Process

01.Build Introduction # 과정 Pre Processor 과정부터 Linker 과정 까지를 Compile이라고 부른다 # 대표 컴파일러 종류 Visual C++ gcc clang 02.Header file 선언부는 헤더 파일에 구현부는 cpp파일에 넣어주는 것이 일반적이다 03.PreProcessor 전처리 과정에서는 #include, #define, #ifdef, #pragma once와 같은 #을 사용한 부분들을 복사 & 붙여 넣기를 통해 처리한다 여러 파일들이 생성되고 서로 헤더파일을 참조하다 보면, 전처리 과정에서 include 중복이 발생하는데 이를 막아주기 위해서는 모든 헤더파일 위에 #pragma once를 작성하면 된다 C++에서는 최대한 define 문법을 사용하지 않는 ..

C++/[노코프] C++

[C++ NOTE] Memory Structure

01. Variables in Memory # 스택 메모리와 변수 스택 메모리에 변수가 저장되는 방법은 스택 메모리의 가장 위 부분부터 데이터를 하나씩 쌓아가고 스택이 쌓이는 방향은 메모리의 주소가 감소하는 방향으로 쌓인다 # 예시 #include int main() { int a = 0; int b = 0; int c = a+b; double d = 2.5; std::cout