C++ 8

08. C++_string class와 관련 기능

string 클래스는 C++ STL에서 제공하는 클래스로, 말 그대로 문자열을 벡터와 같이 다룰 수 있게 해주는 클래스 입니다.C에서는 char* 또는 char[] 의 형태로 문자열을 다뤘다면, C++에서는 문자열을 하나의 변수 타입처럼 사용하며, std::string은 C++표준 라이브러리의 일부분으로 문자열 처리를 위한 다양한 기능을 제공합니다. C++의 std::string 클래스와 C의 문자열을 다루는 방식에는 몇 가지 중요한 차이가 있습니다. 이 차이점들은 주로 사용의 메모리 관리, 사용의 편의성, 기능성 등에서 나타냅니다. 1. 메모리 관리C문자열은 메모리 관리를 사용자가 직접 해야합니다. 문자열의 크기를 미리 할당해야 하고, 필요에 따라 메모리를 할당하거나 해제해야 합니다. 이로 인해 메모리..

C++ 2024.06.16

09. C++_동적으로 배열 할당하기

단일 변수에 대한 동적할당 외에 포인터를 활용하여 배열 변수를 동적할당 할 수 있다. 컴파일 타임에 배열 길이를 정하는 고정 길이 배열과는 다르게 배열을 동적으로 할당하면 런타입 동안에 배열 길이를 선택할 수 있다.동적으로 배열을 할당하려면, new 연산자와 delete연산자를 사용해야한다. 1. 1차원 배열 동적 할당 하기 1차원 배열은 배열의 이름이 곧 그 배열의 시작 주소이다.int형 자료구조의 방을 가리키는 num 포인터 변수에 생성하고자하는 size를 가지는 동적 메모리를 할당한다.#includeusing namespace std;int main() { //실행중에 배열의 크기 입력받아 1차원 배열 동적 할당하기 int length; int* num; cin >> length; num = new..

C++ 2024.05.16

07. C++_call by value/call by pointer/ call by reference 이해하기

1. Call by valueCall by value란 함수 호출 시 넘기는 인자의 값이 매개변수에 복사 되어서 함수에서만 동작하도록 하는 것이다.Call by value로 전달된 매개변수는 함수 내의 지역 변수 역할을 하며 함수가 종료될때 함께 종료되어 사라진다.따라서 swap을 해도 값이 바뀌지 않는다. void callByValue(int a, int b){ int temp = a; a = b; b = temp;}int main() { int a = 10; int b = 20; callByValue(a, b); cout >> 10, 20  2. call by pointercall by pointer는 포인터를 통해 변수 a와 변수 b에 대한 주소를 직접 가져와서 함수 내부에서 포인터를 역참조(*a,..

C++ 2024.05.16

05. C++_파일 입출력

파일 입출력 클래스는 fstream 클래스에 있다. 클래스의 open()메소드를 통해 파일을 열거나 생성할 수 있다. 파일을 닫을 때는 close()를 호출하여 명시적으로 파일을 닫을 수 있다.파일을 읽어들이는 방법으로는 한글자씩 읽어들이는 방법(get), 한줄씩 읽어들이는 방법(getline), 끝이 날때까지 읽어들이는 방법(!readFile.eof()) 등이 있다.#include #include using namespace std;int main() { //파일 쓰기 ofstream writeFile; writeFile.open("test.txt"); char str[256] = "wonderful world"; writeFile.write(str, strlen(str)); writeFile.clos..

C++ 2024.05.15

04. C++_얕은복사/깊은복사

객체를 복사한다는 것은 내용을 다른 객체로 복사하는 것을 의미하는데, 클래스의 객체가 다른 객체로 복사될 때는 보통 매개변수로 같은 클래스의 객체를 받아서 그 객체의 내용을 복사하여 새로운 객체를 생성하는 복사 생성자 (copy Constructor)에 의해 복사가 수행됩니다. 이 때, 복사 생성자가 어떻게 구현이 되었냐에 따라 객체 복사가 깊은 복사인지, 얕은 복사인지 결정되게 됩니다. 이번 포스팅에서는 깊은 복사, 얕은 복사에 대한 개념과 간단한 예제에 대해 알아보겠습니다.깊은 복사(Deep copy)깊은 복사는 객체를 복사할 때 해당 객체가 동적으로 할당된 메모리를 사용하고 있다면, 이 동적 메모리까지 새롭게 할당하고 복사하여 두 객체가 완전히 독립적인 데이터를 갖도록 하는 것입니다. 따라서 포인터..

C++ 2024.03.24

03. C++_invoke

일반적으로 클래스의 멤버함수를 호출할 때 멤버함수와 함께 객체의 정보가 함께 전달됩니다. 따라서 static 이 아닌 멤버 함수는 함수가 호출될 때 컴파일러가 객체의 객체의 정보 또한 함수의 인자로 전달을 하는데 이것을 thiscall이라고 합니다.  예를 들어 인자가 1개인 멤버 함수 mf1(int a)가 있다고 했을 때, 실제 객체가 함수를 호출할 때에는 mf1(&pt, int a)와 같이 2개의 인자를 전달하는 형태로 바뀝니다.  멤버 데이터는 객체당 한개씩 생성되는 반면, 멤버 함수는 여러 객체가 있어도 하나만 존재하는데 컴파일러에서 멤버함수를 호출할 때 객체에 대한 정보를 보내주기 때문에 멤버함수의 인자가 어떤 객체의 멤버인지 알 수 있습니다. class Point{ int x{0}; int y..

C++ 2024.03.24

02. C++_Initializer_list

Initalizer_list는 c++11 표준 라이브러리에서 제공하는 타입으로, 배열의 초기화를 쉽게 처리하기위한 reference 객체입니다. 이 객체는 const T 타입의 요소로 이루어진 배열에 대한 접근을 제공하며, 중괄호 '{}'안에 나열된 값을 가져와 메모리를 초기화 합니다. 이때 배열이 놓인 메모리가 어느 위치인지는 정의되어있지 않고, readonly로 읽기 전용 메모리에 할당되어 s가 파괴될 때 같이 헤제됩니다.  std::initializer_list는 멤버함수로 size(), begin(), end() 등을 가지며, 포인터 2개로 구현되어 연속된 메모리의 시작위치와 끝 위치를 가리킵니다. * initializer_list의 멤버함수#include #include int main(){ ..

C++ 2024.03.18

01. C++_Placement new

Placement new는 메모리를 할당하는 방식 중 하나인데, 이는 사용자가 이미 할당된 메모리 영역에 생성자를 명시적으로 호출하여 객체를 직접 생성하기 위한 방식입니다.이는 일반적인 new 키워드를 사용하여 동적으로 메모리를 할당하는 것과는 조금 다릅니다. 보통 new 키워드를 사용하여 동적으로 메모리를 할당하면 시스템은 메모리를 할당하고 (메모리할당&생성자호출), 생성자를 호출하여 객체를 초기화 합니다. 반면 Placement new는 이미 할당된 메모리 영역에 생성자를 호출하여 객체를 직접 생성합니다. (생성자만 호출)우선 기존의 new 키워드를 활용하여 동적할당을 하는 방법에 대해서 살펴보겠습니다.- new Point(1,2)#include #include class Point{ int x..

C++ 2024.03.11