본문 바로가기

연산자오버로딩

이항연산자 오버로딩의 교환법칙 연산자 오버로딩 교환법칙 교환 법칙은 - 와 + 연산자에서 허용되는 법칙이다. 객체 끼리의 계산 또한 일반 상수와 연산을 하거나 교환 법칙을 사용해야 할 때가 있다. (A라는 클래스가 있고 priate에 x와y라는 변수가 있다고 가정하자.) A p1(1,2); A p2 = p1 + 3; 이 문장을 해결 하기 위해서는 연산자 오버로딩을 약간 변경 해야한다. 매개변수를 받아오는 부분에서 자신의 자료형인 A 클래스의 객체를 받는 것이 아니라 int 형 매개변수를 받아와야 한다는 것이다. 구현부는 다음과 같다. A operator+(int val) { A(p1.x + val, p1.y + val); return temp; } 하지만 만일 A p3 = 3 + p1; 이라는 코드를 추가했다고 가정하면 문제가 생기게.. 더보기
단항 연산자 오버로딩 단항연산자 오버로딩 단항연산자 오버로딩은 이항연산자랑 조금의 차이를 보인다. 단항연산자는 피연산자가 하나 밖에 없기 때문에 멤버 함수는 메개변수를 받지 않는다. 또한 일반 전역 함수로 오버로딩을 하게 되면 메개변수는 하나만 받는것!(머...기본이지 이건.ㅋ) 하지만 차이를 보이는 부분이 상당하다. 기본적으로(A라는 클래스가 있고 x와y 멤버를 가지고 있다고 가정) 멤버 함수라고 한다면... A& operator++()//매개변수없다. 또한 리턴값이 레퍼런스이다. { x++; y++; return *this;//리턴값이 자기자신이다. 자기자신의 주소를 역참조 하기 때문이다! } 일반 전역 함수라고 한다면... 클래스 내부 friend A& operator++(A& p);//매개변수가 한개이다. 함수 부분 .. 더보기
연산자 오버로딩(멤버함수) 연산자 오버로딩 class라는 사용자 정의 자료형을 가지고 =,+,-,*,/ 등의 연산을 하기 위함이다! 젠장 먼말인고 하니... int a = 10; int b = 10; 두개의 변수가 있다. 이를 int c; c = a + b; 를 하게 되면 전혀 틀린 문장(라인이 틀리다고 생각하자ㅡ,.ㅡ)이 아니다. 하지만...만약 이것이 기본 자료형이 아니라 클래스의 객체라면(참고로 클래스도 일종의 사용자 자료형이다^^) A라는 클래스가 있다고 가정 A a1(10); A a2(20); A a3(a1+a2); 별다른 작업 없이 이게 된다고 생각하면 개오산 이다.(오산이 지명이더군..ㅋㅋ) 정의 :객체간의 연산을 허용하기 위함이 연산자 오버로딩 이다. 연산자 오버로딩도 함수의 일종이다. 이를 잊지 말아야 하며, C나.. 더보기