리턴타입 Class::operator 연산자(인수 목록)
{
함수 본체;
}
연산자 오버로딩 예제 |
#include <iostream> using namespace std;
class A {
public: int iNum; // 디폴트 생성자 A() { iNum = 0; cout << "디폴트 생성자\n"; }
~A() { cout << iNum <<" 소멸자 호출\n"; }
// 복사생성자 A(A &r) { // 디폴트 생성자에서 받은 값을 다시 넣어줌 iNum = r.iNum; cout << "복사 생성자\n"; }
// 대입연산자 함수를 직접 만들수 있다/ operator= << 함수이름 A&operator=(A &r) { this->iNum = r.iNum;
cout << "대입연산자 호출\n"; return *this; }
A operator+(A &r2) { // 디폴트 생성자 호출 A Tmp; Tmp.iNum = this->iNum + r2.iNum;
cout << "덧셈연산자 호출\n";
// 소멸하기전에 임시생성자(복사생성자)를 호출해서 Tmp 를 저장 해둔다. return Tmp; }
// friend A operator=( A &r1, A &r2); };
// 함수!, 반환값이 있어야함 A& << /*A operator=(A &r1,A &r2) { r1.iNum = r2.iNum;
cout << "대입연산자 호출\n";
return r1; }*/
int main() { // 디폴트 생성자 호출 class A Obj1; // 복사 생성자 호출 class A Obj2(Obj1); // 복사 생성자 호출 class A Obj3 = Obj1;
// operator= : 함수호출 // 대입연산자 호출 Obj1 = Obj3; Obj3.operator=(Obj1);
Obj1.iNum = 1; Obj2.iNum = 2; Obj3.iNum = 3;
cout << Obj1.iNum << endl; cout << Obj2.iNum << endl; cout << Obj3.iNum << endl;
// 덧셈 연산자 Obj1 = Obj3 + Obj2;
cout << Obj1.iNum << endl; cout << Obj2.iNum << endl; cout << Obj3.iNum << endl;
return 0; }
: 임시객체(복사생성자)에다가 덧셈을 한 결과를 저장해둔다. |
참조사이트 : http://soen.kr/ > C++ 문법 연산자 오버로딩