본문 바로가기

operator

항목 11. operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자. 자기대입(self assignment) 자기대입(self assignment)이란, 어떤 객체가 자기 자신에 대해 대입 연산자를 적용하는 것을 말합니다. #include using namespace std; class Widget{}; void main() { Widget w; w = w; //자기대입 } 문제는 무엇인가? 같은 타입으로 만들어진 객체 여러 개를 참조자 혹은 포인터로 물어 놓고 동작하는 코드를 작성할 때는 같은 객체가 사용될 가능성을 고려하는 것이 일반적으로 바람직한 자세라고 할 수 있겠습니다. 사실, 같은 클래스 계통에서 만들어진 객체라 해도 굳이 똑같은 타입으로 선언할 필요까지는 없습니다. 파생 클래스 타입의 객체를 참조 하거나 가리키는 용도로 기본 클래스의 참조자나 포인터를 사용하면.. 더보기
[C++] 쉬프트 연산자 오버로딩 (cout, cin, endl) 쉬프트 연산자 : 쉬프트 연산자란, 우리들이 흔히 쓰는 cout, cin, endl 키워드를 쓸때 앞이나 뒤에 붙이는 연산자이다. 일반적으로 표준 라이브러리에 std라는 namespace에는 cout이나 cin에 관련된 클래스들이 있다. 그것이 바로 istream과 ostream이다. 이런 namespace를 일일이 입력하기 싫어서 using namespace 라는 간편한 문법을 쓰기도 한다. C++에서는 이런 쉬프트 연산자도 연산자 오버로딩이 가능하다. 쉬프트 연산자 오버로딩 int main(void) { Point p(1, 3); cout 더보기
[C++] 연산자 오버로딩 (Operator Overloading)의 두가지 방법 연산자 오버로딩(Operator Overloading)은 C++ 문법과 우리와의 약속이라고 할 수 있는데, 우리가 함수를 정의하는데 이어서 operator라는 키워드와 연산자를 붙여서 함수의 이름을 만들 경우에 (operator + 이렇게 ) 우리가 일반적인 함수를 호출 방법 말고도, 연산자만을 이용해서도 함수가 호출 되도록 해주겠다는 이야기이다. 멤버 함수에 의한 오버로딩 #include using namespace std; class Point { private: int x, y; public: Point(int _x=0, int _y=0):x(_x), y(_y){} void ShowPosition(); Point operator+(const Point& p); }; void Point::ShowPo.. 더보기