목록프로그래밍 언어/C, C++ (9)
찬란

C++ 에서 class 를 통해 객체를 생성하려면 생성자를 거쳐야 하고 제거하려면 소멸자를 거쳐야 한다. ( 생성된 순서의 역순으로 소멸자가 호출됨 ) 디폴트 생성자 (default constructor) - 매개변수가 없는 생성자 - class 선언 시 생성자를 선언하지 않으면 자동으로 디폴트 생성자를 정의해준다. - 생성자를 하나라도 선언하면 컴파일러는 묵시적으로 디폴트 생성자를 정의하지 않는다. 묵시적 디폴트 생성자 컴파일러가 자동으로 만들어주는 생성자 class Test{ public: // Test(){} // 묵시적 디폴트 생성자 void foo(){} }; int main(){ Test test; } class Test{ private: int value{0}; public: // 묵시적 디..
std::cout.precision(n); 소수점 아래 자리를 (n - 1)으로 조정 #include #include int main(){ double a = 1.23456789f; std::cout

변수: 값을 보유하고 있는 메모리 조각의 이름 프로그램이 변수를 인스턴스화 할때 사용 가능한 메모리 주소가 변수에 자동으로 할당되고, 변수에 할당된 값은 이 메모리 주소에 저장된다. 포인터는 어떠한 값을 저장하는 것이 아닌 메모리 주소를 저장하는 변수이다. 주소 연산자 (&) (The address-of-operator) = return (주소) 주소 연산자 & 를 사용하면 변수에 할당된 메모리 주소를 확인할 수 있다. 역참조 연산자 (*) (The dereferenece operator) = return (값) 역참조 연산자 * 를 사용하면 특정 주소에서 값에 접근할 수 있다. (이것은 단항 연산자) 포인터 선언 (Declaring a pointer) 자료형* 포인터 이름 int* p..
고정 배열(fixed array) int array[5] = {1,2,3,4,5}; array 타입: int[5]형 &array[0] 타입: int* 형 배열 자체는 배열의 첫 번째 요소의 주소를 가지고 있다. = 포인터!! + 배열을 역참조하여 첫 번째 요소의 값을 얻을 수 있다. (실제로 배열 자체를 역참조하지는 않는다. int[5]타입의 배열은 int타입의 포인터로 암시적으로 변환되고 포인터를 역참조하여 포인터가 보유하고 있는 메모리의 주소의 값을 얻을 수 있다.) 또한, 배열을 가리키는 포인터를 지정할 수 있다. int* ptr = array; int a[5] = {1,2,3,4,5}; int *b; std::cout
상수를 가리키는 포인터 (Pointer to const Value) = const int* 상수를 가리키는 포인터는 상수 변수의 주소를 가리키는 비상수(non-const) 포인터다 const int value = 5; const int* ptr = &value; ptr 은 const int를 가리키고, ptr 자체는 비상수(non-const) 포인터이다. 상수를 가리키는 포인터는 상수가 아닌 변수를 가리킬 수 있다. 초기에 const로 정의된 변수만 상수로 취급한다. int value = 5; const int* ptr = &value; value = 6 // 가능! 그러나 다음은 불가능하다. int value = 5; const int* ptr = &value; *ptr = 6; // 불..
포인터를 가리키는 포인터: 다른 포인터의 주소를 보유하는 포인터 int** dptr; 이중 포인터는 직접 값으로 설정할 수 없다. int value = 5; int** dptr = &&value; // compile error int** dptr = nullptr; // good 포인터 배열 (Arrays of pointers) int* arr[3]; // "포인터" 들의 배열 동적으로 포인터의 배열을 할당할 때 이중 포인터가 흔히 쓰인다. int **array = new int*[10]; + 배열 포인터 (pointer to array) int (*arr)[4]; // "배열"의 포인터 그냥 하나의 포인터임 2차원 동적 배열 할당 고정 배열 할당 int array[10][5]; 동적 배열 할..
기존 포인터는 할당과 해제가 짝을 이루어야 하는 구조이다. 따라서 C 에서는 malloc 과 free를, C++ 에서는 new 와 delete를 사용하여 메모리 할당과 해제를 관리하였다. 하지만 프로그램을 짜면서 이를 일관성 있게 모두 수행하는 것은 개발자의 피로도가 증가하고 생산성이 감소하는 복잡하고 피곤한 과정이다. 그래서 Java에서는 가비지 콜렉터(Garbage collector)라는 것이 존재하여 메모리 해제를 따로 관리하는데, 이는 결국 프로그램 사용량을 늘리는 일이기 때문에 작업이 좀 더 느리게 수행된다. C++에서도 메모리 해제의 피로도를 줄여주기 위해 스마트 포인터라는 것을 지원하고 있다.(C++11이상부터!) 스마트 포인터의 종류에는 3가지가 있다. unique poi..