[c++_10. 연산자의 오버로딩과 중첩 ]

·2022년 8월 19일
0

C++_Study

목록 보기
18/25

#220819~

#10-1. C와 C++ 연산자, 연산자 중첩

  • 연산자 중첩( operator overloading)

#10-2. 연산자 오버로딩의 필요성

#10-3. 연산자 오버로딩 형식

operator라는 키워드를 사용하며, 그 형식은 다음과 같음

  • 단항연산자 중첩
    • 리턴형 operator 연산자명(); //++X, (전치)
    • 리턴형 operator 연산자명(int); //x++, (후치)
  • 이항연산자 중첩
    • 리턴형 operator 연산자명(매개변수);

#10-4. 단항 연산자 오버로딩 예

단항 연산자에는 ++, --, - 부호가 있다. (전치, 후치)

  • 피연산자가 하나이다.

    • x++ : x를 1 증가
    • --y : y를 1 감소
    • -5 : 5를 마이너스
  • 단항연산자를 중첩할 때는 매개변수가 필요없다. (항상 좌우의 변수 객체가 피연산자이므로)

    • 리턴형 operator 연산자명(); 전치, ++x
    • 리턴형 operator 연산자명(int); 후치, x++
  • 전치 연산자란 변수명 앞에 연산자가 오는것을 말한다 (++x, --i 등)

  • 전치 연산자는 연산이 먼저 일어나고 대입이 된다.
    int x=10;
    std:: cout << ++x

  • 전치 단항 연산자 중첩의 형식

  • 리턴형 operator 연산자명(); -> 매개변수 없음

void operator ++(int) // 후치인 경우 int를 꼭 적기
{
	// 전치인지 후치인지
    ++i; or i++; 
}
  • x, y의 값을 하나 증가시키는 함수 만들기
    [ver.1]
class Point{
    int x;
    int y;
public:
    Point(int i, int j){x=i; y=j;}
    int getX() {return x;}
    int getY() {return y;}

    void upPrint(){     
        ++x; ++y;
        std::cout << x << " " << y << std::endl; 
    }
// return 값을 point형, 클래스형을 리턴한다 (Point up()함수)
// Point형이라는 것은 그 class의 멤버변수를 다 return한다
Point up(){           
    ++x; ++y;
    // this는 객체의 주소, * 찍으면 그 값
    return *this;       
    }
};

int main()
{
    Point p1(3,4);
    p1.upPrint();
    p1.up();
    std::cout << p1.getX() << ",";
    std::cout << p1.getY(); 
    return 0;
}

4,5
5,6

[ver.2]

class Point{
    int x;
    int y;
public:
    Point(int i, int j){x=i; y=j;}
    int getX() {return x;}
    int getY() {return y;}

    // 원래 전치 ++연산자는 수를 1증가시키는 연산자임지만 
    // point클래스형 객체에는 멤버변수 x,y를 각각 1씩 증가시키는 연산자로 재정의
    
    Point operator++(){         //이 부분을 함수의 이름으로 생각!
        ++x;
        ++y;
        return *this;
        // 객체를 반환한다, x,y 모두리턴
    }
};

int main()
{
    Point p1(2,3);
    ++p1;
    std::cout << p1.getX() << ",";
    std::cout << p1.getY(); 
    return 0;
}
  • 후치 단항 연산자 중첩

#10-5. 이항 연산자 오버로딩 형식

  • 이항 연산자 중첩
void operator+(int x) // 이 부분을 함수 이름
{
	:
}
  • 1+(2)
    • 1은 연산자의 주체, (2)는 매개변수

#10-6. 이항 연산자 오버로딩 예

  • 연산자를 직접 만들 수있다. (+, - 도)

  • temp 객체를 만들고 대입하는 것이 안전하다!

  • 연산자 == 사용

profile
Hakuna Matata

0개의 댓글

관련 채용 정보