뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++
-
Overloading 오버로딩 - 연산자뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 11. 2. 12:54
0. Overloading 이란? C++에서는 코드에 이름이 같은 함수가 여러 개 있다면, 컴파일러(Compiler)는 함수를 호출하는 시점에, 타입이 일치하는 함수를 선택하게 되는데, 이를 오버 로딩(Overloading)이라 합니다.(오버 라이딩(Overriding)과 혼동하는 경우가 많으니, 주의해야 합니다.) 더구나 C++는 대부분의 연산자가 클래스와 관련된 특수 연산을 수행하도록 오버 로드하는 기능을 제공하는데, 예를 들어서 String 클래스는 + 연산자를 오버 로드하여 두 문자열을 연결할 수 있도록 합니다. 다양한 오버 로딩 연산자가 있지만, 이 글에서는 연산자 함수의 오버 로딩에 대해서 알아보겠습니다. (연산자 함수를 오버 로딩하면서, 유저가 만든 다양한 구조체 및 클래스에 대해서, 연산을..
-
Shared_ptr 내부 구조 & 주의점뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 10. 26. 17:43
0. shared_ptr shared_ptr 이란, 어떤 객체에 대하여, 더 이상 사용하는 곳이 없을 때, 자동적으로 메모리를 해제해주어, 사용자의 편의성을 증가시켜 주는 녀석입니다. msdn에서는 다음과 같이 설명하고 있습니다. shared_ptr은 내부적으로 각 객체가 몇 번 참조되었는지를 나타내는 control block을 가지게 되고, control block 이 0이 되었을 시, 객체의 메모리를 해제하게 됩니다. 원리는 이쯤 하면 되었고, shared_ptr에 대해 더 깊이 이해해보겠습니다. 1. shared_ptr의 내부 count 동작 shared_ptr 은 내부에 다음과 같은 control block을 가지고 있는데, T 객체에 대한 포인터 참조된 횟수를 세어주는 Reference Coun..
-
가상 소멸자 / 가상 소멸자 사용 이유뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 10. 26. 12:02
0. 상속이란 개념 c++ 뿐만 아니라 다른 언어에서도 상속(inheritance)이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미합니다. 상속을 사용하게 되면, 기존에 정의되어 있는 클래스의 모든 필드와 메서드를 물려받아, 새로운 클래스를 생성할 수 있습니다. 그리고 상속을 하게 되면, 각 계층(부모 또는 자식)에 맞는 메모리 할당이 발생하게 되는데, 이는 다형성(polymorphism)이라는 중요한 성질을 띄게 됩니다. 다형성에 관한 글은 설명이 많아져 따로 작성하겠습니다..! 아무튼 상속을 사용하게 되면 여러가지 장점도 존재하지만, "주의해야 할 점"도 존재합니다. 그중 하나가 가상 소멸자에 관한 내용입니다. 1. 생성자 / 소멸자 호출 순서 파생된 클래스의 생성..
-
[C++] String to Int, Float, Double 자료형 / stoi, stol, stoll뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 10. 26. 00:56
0. atoi 계열 함수 및 sscanf( ) 기존 C에서는 str형식 사용시 다른 자료형(int, double, float)에 맞도록 읽어오려면, atoi( ) 및 sscanf( )로 형식을 지정해주었으며, 이를 활용한 간단한 예시는 밑과 같습니다. const char *str = "12345"; // atoi 계열 함수 int x = atoi(str); // sscanf 사용 int y; sscanf(str, "%d", &y); c++에서는 이와 비슷한 방법으로 stoi( ) 및 타입 캐스팅 그리고, 반복자를 활용하여, 데이터 변환을 할 수 있는 데, 그중에서, stoi( ) 계열 함수에 대해 알아보겠습니다. 1. c++ 에서의 stoi( ) c++에서 stoi() 함수는 문자열을 정수 값으로 변환하..
-
Map 을 Vector 로 변환하기뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 10. 20. 17:09
0. Map을 Vector로 변환하기 Map을 Vector 자료형으로 변환할 일이 있었는데, 여러 가지 방법이 존재하여, 글로 남겨놓습니다. C++에서 Map 은 정렬되어 있는 컨테이너로써, Key-Value 쌍으로 이뤄져 있습니다. 이때, Key 들은 Compare 될 수 있는 값들에 의해 정렬되어 있고, Bidirectional 반복자를 가집니다. 1. Map 구조체 Vector로 변환하기 변환하는 방법에는 여러가지가 존재하지만, 대표적인 것 몇 가지만 알아보겠습니다. Vector 생성자 이용하기 Copy 알고리즘 이용하기 Transform 알고리즘 이용하기 ForEach 알고리즘 이용하기 방법 등이 존재합니다. 1 번은 Map의 반복자가 Pair 인 점을 활용하여, Vector 생성자에 반복자..
-
스마트 포인터 : Unique_ptr뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 5. 8. 10:24
C+11 부터, BOOST 라이브러리 들의 boost::shared_ptr, boost::scoped_ptr 등은 표준화 되어, std::unique_ptr, std::shared_ptr 들이 되었습니다. 개인적으로 스마트 포인터를 직접 만들어 보는 것은 별로 좋은 생각이 아닙니다. 스마트 포인터들의 작동방식은 간단해보이지만, 실제로 스마트 포인터들은 모든 맥락에서 올바르게 작동하도록 노력한 라이브러리 이기 때문입니다. 요번 글에서는 Smart Pointer 중 하나인 Unique Ptr 의 사용법 과 간단한 예시를 보입니다. 먼저 Unique_ptr 이란 ? (cpp reference 발췌) std::unique_ptr is a smart pointer that owns and manages anoth..
-
[C 언어] 형변환 _ 구조체 형변환뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 1. 22. 20:22
0. C 에서 형변환이란? - C 언어에서 형변환(Type casting)이란 어느 한 데이터 타입에서 다른 데이터 타입으로의 전환입니다. Data conversion 이라고도 하며, C 에서는 빈번한 형변환이 이루어져 type casting 의 의미를 집고 넘어가는게 중요하다고 생각합니다. - C 언어에서는 형변환을 하기 위해 2가지의 형변환을 제공하는데, 묵시적 형변환 (implicit type casting) 명시적 형변환 (explicit type casting) 2가지를 제공하고 있습니다. 이에 대해서는 밑부분에 추가 설명 하도록 하겠습니다. 1. 묵시적 형변환 Implicit Type casting - 묵시적 형변환의 경우, 데이터 형변환이 일어날때, 본질의 의미를 흐리지 않고, 형변환이 이뤄..