티스토리 뷰

반응형

* 연산자 함수

연산자(operator)는 간결하게 의미를 전달할 수 있는 편리한 기호이다. 일반적으로는 연산자 기호를 사용하는 편이 함수를 사용하는 것보다 이해하기 쉽다.

 

sum = x + y + z;    →연산자 사용

sum = add(x , add(y , z));    →함수 사용

 

연산자 함수는 객체를 가지고 연산을 도와주는 함수이다. 객체들 끼리 연산을 할 수도 있고, 객체와 데이터들이 연산을 할 수도 있고, 데이터와 데이터들이 연산을 할 수 도 있다. 연산자는 이미 정의되어 있는 하나의 개체이기 때문에 원래의 의미를 재정의 하여 의미를 고치면 사용할 수 없다.

 

연산자 함수는 개발자가 직접 제공을 해줘야 사용이 가능하다. 함수를 호출하면 언제든지 연산을 수행한다.

 

 

 

 

 

* 연산자 중복

연산자 중복이란 여러 가지 연산자들을 기초 타입뿐만 아니라 객체에 대해서도 적용하는 것을 의미한다. 예를 들어 +(더하기) 연산자는 정수나 실수와 같은 기초 타입에 대해서만 사용이 가능하다. 하지만 c++ 에서는 + 연산자를 클래스 타입에 대해서도 사용할 수도 있도록 연산자의 의미를 확대하는 것이 가능하다.

 

c++에서 연산자는 함수로 정의된다. c++에서 함수는 얼마든지 중복(overloading)이 가능하다. 따라서 연산자도 중복이 가능하다. 연산자를 중복하려면 아래와 같은 형식을 사용한다.

 

반환형 operator 연산자(매개 변수 목록)

{

...    // 연산 수행

}

 

중복된 연산자는 특수한 이름을 가진 함수라고 생각하면 된다. 즉, 키워드 operator에 연산자 기호가 붙어 있는 함수이다. 다른 함수처럼 중복된 연산자도 반환형매개 변수 리스트를 가진다.

 

만약 클래스의 멤버 함수로 정의한다면 피연산자의 개수보다 하나 적은 수의 매개 변수를 가진다. 이 경우, 현재 객체가 암묵적으로 첫번째 피연산자가 된다. 따라서 2개의 피연산자를 가지는 이항 연산자의 경우에는 하나의 매개 변수만을 가지게 된다.

 

 

 

* + 연산자

예를 들어 A 클래스에서 + 연산자를 비 멤버 함수를 사용한다고 가정하자. 연산자가 중복되어 있으면 컴파일러는 + 연산자를 함수 operator+()로 변경하여 호출한다. 일반 함수로 구현하면 모든 피연산자들이 연산자 함수의 매개 변수로 전달 된다.

 

연산자 함수를 효율적으로 구현하려면 내부 데이터에 접근할 수 있는 프렌드 함수 형태로 구현 하는 것이 좋다. 아래 코드를 보고 +연산자에 대해서 알아보자.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<iostream>
#include<string>
using namespace std;
 
class A {
    int a;
public:
    A(int a = 100000) {this->= a;}
    void setA(int a) {this->= a;}
    int getA()const{return a;}
    /*int operator+(int data) {//대입 연산자
        //객체를 가지고 산술연산을 도와주는 함수
        //개발자가 직접제공 필수
        //불러주면 언제든지 연산을 해주겠다
        //제일 중요한거 : +를 꼭 써줘야한다. 원래 의미를 바꾸지 말아야함.ex)new는 동적할당할때만 쓰임
        //멤버함수//외부함수
        return this->a + data;//내가 가리키는 a에 값을 더해야함
    }*/
};
int operator+(const A &aa, int data) {
    //메인에서 A 객체와 int 타입의 정수를 같이 보냈기 때문에 매개변수도 2개로 받아야함
    //&는 레퍼런스로 값 카피한것
    //값 바꾸려면 레퍼런스만 해야함//레퍼런스는 내가 부르는 닉네임이라 할 수 있음
    return aa.getA() + data;
    //aa가 받는 값에 데이터를 
 
}
 
 
void main(){
    cout <<3+4 << endl;//값 7
    A aa(10);//객체 생성
    
    cout << aa+4 << endl;//값 14//객체+정수
    //+는 함수다//aa 안에 +라는 함수가 있다면 4를 줄게
    //아래는 모두 같은 표현
    //1. aa.+(4)    
    //2. aa.operator+(4)
    //3. operator+(aa.4)
}
cs
반응형
댓글
공지사항