본문 바로가기
C++ 공부

operator 02

by Dev_Hugh 2021. 8. 20.
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