728x90
반응형
Study about operator overloading
arithmetic operators
산술 연산자 예시
class MyData
{
public:
MyData()
{
cout << "MyData()" << endl;
}
~MyData()
{
cout << "~MyData()" << endl
}
int GetData() const
{
return m_Data;
}
void SetData(int a)
{
m_Data = a;
}
explicit MyData(int my) : m_Data(my)
{
cout << "MyData(int)" << endl;
}
MyData(const MyData &my)
{
cout << "MyData(const &)" << endl;
m_Data = my.m_Data;
}
MyData(const MyData && my)
{
cout << "MyData(const MyData &&)" << endl;
m_Data = my.m_Data
}
// 상수 참조 호출가능한 함수 버전 맨 뒤에 const 붙임
MyData operator+ (const MyData &my) const
{
// return MyData(this->m_Data + my.m_Data);
MyData result;
result = m_Data + my.m_Data;
return result
}
void operator= (int a)
{
SetData(a);
}
MyData& operator= (const MyData &my)
{
SetData(my.GetData());
return *this;
}
private:
int m_Data = 0;
};
MyData TestFunc(const MyData &l, const MyData &r)
{
return l + r;
}
int main(void)
{
MyData a;
MyData b;
MyData c;
MyData result = TestFunc(a+b); // 1번
c = result;
TestFunc(5+4); // 2번
cout << "End of main()" << endl;
return 0;
- TestFunc 는 상수형 두 개를 참조하여 + 함수를 호출해 return 하는데 상수형 참조는 호출 가능한 함수도 상수 메소드로 제한되니 operator+ 함수뒤에 const 추가
- operator+ 메소드내 return도 변환시 1번 실행시 이동대입 연산자가 호출됨
- 즉 a+b 에서 임시객체가 생성되고 이 임시객체를 원본으로 복사생성되는 구조일때 이동생성자가 불리는 구조다
- 항상 explicit를 붙여 2번 경우 막자
728x90
반응형
'C++ 공부' 카테고리의 다른 글
inheritance 02 (0) | 2021.08.20 |
---|---|
inheritance 01 (0) | 2021.08.20 |
operator 01 (0) | 2021.08.20 |
constructor 05 (0) | 2021.08.20 |
constructor 04 (0) | 2021.08.20 |