C++/기타

·C++/기타
저번 포스트에서 다룬 복사 방식의 대입 연산자 오버로딩은 l-value에 대해서 작동합니다. 이번 포스트에서 다룰 이동 대입 연산자 오버로딩은 r-value를 다룹니다. 다음 코드 조각을 살펴봅시다. Mystring s1; s1 = Mystring{"Ricky"};// Move Assignment 여기서 empty string을 담는 Mystring 객체 s1을 선언했습니다. 그리고 s1에 Mystring{"Ricky"}를 통해서 Ricky라는 문자열을 속성으로 지닌 Mystring 객체를 할당했습니다. 여기서 중요한 점은, s1에 값을 저장하기 위해서 새로운 이름 없는 임시 객체를 만들고, 그 값을 s1에 저장을 한 뒤에 임시 객체를 제거합니다. 이것이 r-value 객체입니다. 하지만 아시다시피 이런..
·C++/기타
C++에서는, 한 객체에서 다른 객체로의 대입 연산자 사용이 가능합니다. Mystring s1 {"Frank"}; Mystring s2 = s1;// NOT Assingment // Same as Mystring s2 {s1}; s2 = s1// Assignment C++ 컴파일러는 기본 대입 연산자를 생성합니다. 이는 얕은 복사(shallow copy / memberwise assignment) 입니다. 만약 우리가 사용하는 클래스의 속성 중 raw pointer를 사용한다면, 우리는 깊은 복사(deep copy)를 해야합니다. 이번 포스트에서는 c-style string값의 포인터를 속성으로 지니는 Mystring 클래스를 다뤄보겠습니다. class Mystring { private: char *st..
·C++/기타
연산자 오버로딩이란? C++ 에서 우리는 여러가지 연산자를 사용해왔습니다. 더하기(+), 빼기(-), 나누기(/), 곱하기(*)가 대표적입니다. 사실 이러한 연산자들도 이미 오버로딩이 되어 있는 형태입니다. 오버로딩이 한 함수가 여러 다른 자료형 값을 처리할 수 있게 반복적으로 선언하는 것이였죠? 위의 일반적 연산자들도 integer, double, float 등의 자료형을 모두 다룰 수 있기 때문입니다. 다시 돌아와서 이러한 연산자 오버로딩을 우리가 사용하게 될 때에는, 주로 user defined type들을 built-in type들과 비슷하게 행동할 수 있게 하는 목적입니다. 또한 코드의 가독성을 높일 수가 있습니다. 이러한 연산자 오버로딩은 컴파일러에서 자동적으로 행해지지 않습니다. 한 가지 종..
·C++/기타
cin.ignore()은 입력 버퍼를 비우는 역할을 합니다. 예를 들어, cin으로 1000 5000을 받았을 때 다음 cin은 입력을 하지도 않았는데 5000 들어갑니다. 버퍼에 5000 값이 남아있기 때문입니다. 그럴 때 cin.ignore()으로 버퍼를 비우고 나서 다시 입력을 받으면 이런 현상이 방지됩니다.
Ricky U. Lee
'C++/기타' 카테고리의 글 목록