(C++)10장. 연산자 오버로딩

1.1 기본 연산자 오버로딩

class Chulsoo
{
 private:
   int age;
 public:
  Chulsoo(int age):age(age)
{
 cout<<"Chulsoo::Chulsoo(age) 생성자완료"<<endl;
}

void introduce(){}

Chulsoo add(const Chulsoo& chulsooObj);
Chulsoo sub(const Chulsoo& chulsooObj);
Chulsoo mul(const Chulsoo& chulsooObj);
Chulsoo div(const Chulsoo& chulsooObj);
}

int main(void)
{
  Chulsoo chulsoo1(30);
  Chulsoo chulsoo2(15);
  
  Chulsoo chulsooAdd=chulsoo1.add(chulsoo2);

}

Chulsoo Chulsoo::add(const Chulsoo& chulsoo)
{
  cout<<"Chulsoo::add()"<<endl;
  Chulsoo chulsoo(this->age+chulsooObj.age);
  return chulsoo;
}

2번. operator+()

class Chulsoo{

public:
  Chulsoo operator+(const Chulsoo& chulsooObj);
 Chulsoo operator-(const Chulsoo& chulsooObj);
 Chulsoo operator*(const Chulsoo& chulsooObj);
 Chulsoo operator/(const Chulsoo& chulsooObj);
};

int main(void)
{
 Chulsoo chulsooAdd=chulsoo1+chulsoo2;

}

Chulsoo Chulsoo:operator+(const Chulsoo& chulsooObj)
{
 Chulsoo chulsoo(this->age+chulsooObj.age);
}

3번째 객체에 정술를 더하는 방법

int main(void)
{
 Chulsoo chulsoo1(30);
 Chulsoo chulsoo2(15);

Chulsoo chulsooAdd=chulsoo1+3;

}

--->2번과 차이점은 객체를 생성했다.

만약, chulsoo1+3을 3+chulsoo1로 바꾸면 어떻게 될까?
오류가 난다. 컴파일러는 +연산자를 보고 operator+()의 멤버함수가 있는지를 찾는다고했다. 여기서 operator+()멤버함수를 가지는 클래스에서 operator+()의 멤버함수를 찾아야하는데. 3+만봐서는 컴파일러가 어떤 클래스인지 알 수없다.


그래서

class Chulsoo
{
 public:
   friend Chulsoo operator+(const Chulsoo& chulsooObj1,const Chulsoo& chulsooObj2);

}

1.3 대입 연산자 오버로딩

#include<iostream>
using namespace std;

class Chulsoo
{
 private:
  int age;
 public:
  Chulsoo(const Chulsoo& source):age(soruce.age)
 {
    cout<<"복사 생성자 완료"<<endl;
 }

Chulsoo(int age):age(age)
{
  cout<<"생성자 완료"<<endl;

}
Chulsoo()
{
  cout<<"생성자 완료"<<endl;
}
void introduce();
~Chulsoo(){
 cout<<"소멸자 완료"<<endl;
}
};


int main(void)
{
  Chulsoo chulsoo1(32);
  Chulsoo chulsoo2(50);

  chulsoo1=chulsoo2; //같아짐.
}
//operator=()함수를 정의 하지도 않았지만 컴파일러가 자동으로 생성했다.

1.3.1 복사대입연산자

복사대입연산자를 직접 정의한 예제

Chulsoo& operator=(const Chulsoo& chulsooObj)
{
 this->age=chulsooObj.age;
 return *this;
}

--->>>>>>>Chulsoo& 참조자를 반환하는 이유는 연속해서 대입할 수 있다.

chulsoo1=chulsoo2=chulsoo3;

댓글

이 블로그의 인기 게시물

(ElasticSearch) 결과에서 순서 정렬

(네트워크)폴링방식 vs 롱 폴링방식

(18장) WebSocekt과 STOMP를 사용하여 메시징하기