연산자 오버로딩

기존에 우리가 사용하는 연산자를 추가한다.

예를들어 인스턴스 a와 b가 있다고 가정해보자.

무작정 a=b를 하면 오류가 발생한다.

그 이유는 "=" 이라는 대입연산자는 내가 정의한 클래스를 어떠한 방식으로 대입해주어아햐 할지 모르기 때문이다.

하지만 사용자는 멤버변수를 복사하고 싶을것이다.

사칙연산

이를 위하여 나온것이 연산자 오버로딩(operator overloading)이다.

정의

class 클래스명

~
const 클래스명 operator+(<데이터타입> 변수명)    -->데이터타입과 변수명은 +연산시 우측값
{
    return 클래스명(합친값)-->리턴으로 새로운생성자전달
}

};

-->이런식으로 한다면 <클래스명> 인스턴스1=인스턴스2+100;-->이런게 가능해진다.

++,--(단항연산자) 오버로딩

인스턴스++ -> 이런식으로 했을때 모든 맴버변수가 1씩증가하면 좋겠다.

정의--이제 모두 int형 맴버변수와 매개변수를 받겠다고 가정하겠다.

<클래스명> operator++(int) -->애매하게 매개변수가 int가들어가면 후위,없으면 전위!
{
    맴버변수+=1;
    return *this;     -->this는 인스턴스의 주소로 *는 값을 넘겨주겠다는 의미이다.
}

대입 연산자 오버로딩

클래스명& operator = (student& RightValue){

    <기존에 있던값듨 삭제--동적배열 delete>
    <맴버변수 deep copy>
    return *this;

}

shift 연산자 오버로딩

정의

ostream& operator<<(ostream &output, const CMoney &r1)
{
    cout << r1.m_nDollar << r1.m_nCent;
    return output;
}
-->cout의 주소 포트가 output이다. 출력후 리턴해주는 방식이다.

연산자 오버로딩은 /= %= <<= += -= *= >>= &= |= ^= 이렇게 종류가 매우 다양하다.

프렌드 함수

전역함수가 맴버변수에 접근할때 사용된다.

정의 - 클래스의 헤더파일부분

class 클래스명{

pulblic:

    friend 전역함수;

};

위에서 + 연산자를 보면 class+정수 만된다.

하지만 정수 + class 가 나오는경우도 있다.

이런경우 value를 좌우측에서 동시에 받아야 하므로 이때 friend함수를 이용한다.

using namespace std;

class <클래스명>
{
public:
    friend <클래스명> operator+(int <좌측변수>, <클래스명> <우측변수>);
};

<클래스명> operator+(int <좌측변수>,<클래스명> <우측변수>);
{
    <우측변수>.num1 +=  <좌측변수>;
    <우측변수>.num2 +=  <좌측변수>;

   return 우측변수;
}

int main()
{

    <클래스명> 변수명 = 10 + 다른클래스변수명 ;
}

'언어 > CPP(cpp)' 카테고리의 다른 글

동적배열과 이차원 동적배열  (0) 2018.02.06
const  (0) 2018.02.06
vector_static변수_static함수  (0) 2018.02.05
클레스  (0) 2018.02.05
함수 default  (0) 2018.02.05

+ Recent posts