(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;
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;
댓글
댓글 쓰기