A sentimental robot

Operator function 본문

C++

Operator function

GOD03219 2018. 9. 19. 13:58

연산자 함수

 

  •  멤버함수와 외부함수로 만들 수 있다.
  • 멤버함수로 만드는 것을 원칙으로 한다. 멤버함수로 만들 수 없는 경우 외부함수로 만들되 멤버함수처럼 접근할 수 있는 friend로 제공한다.
  • 새로운 연산자 함수를 만들지 않는다; 연산자 본연의 의미를 바꾸어서는 안된다.
  • 객체와 객체 , 객체와 데이터를 연산처리 할 수 있게 한다!

 

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>
using namespace std;
 
class A {
    int a;
public :
    A(int num):a(num){}
    void setA(int a) { this->= a; }
    int getA()const { return a; }
 
    int operator+(const A &bb) 
    { 
        return this->+ bb.a;
    }; // 연산자함수를 멤버함수로 만들었다.
 
    friend int operator +(const A& aa, const A&bb);
 
};
 
int operator+(const A&aa, const A&bb) {
 
    //return aa.getA() + bb.getA(); 프렌드 아닐 때(private접근못함)
    return aa.a + bb.a;
 
}
void main() {
 
    A aa(3);  // aa.a=3
    A bb(4);  // bb.a=4
 
    // cout << aa.getA() + bb.getA() << endl;
 
    //연산자 함수 사용; 객체를 더하기 
    //cout << aa.operator+(bb) << endl; // 1. 멤버함수로 만들었을때
    cout << operator +(aa,bb)<<endl// 2.외부함수로 만들었을때

    cout << aa + bb << endl// 멤버든 외부든 둘 다 불러짐 

 
    
 
}

cs

 

 

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
#include<iostream>
using namespace std;
 
class A {
    int a;
public :
    A(int num):a(num){}
    void setA(int a) { this->= a; }
    int getA()const { return a; }
 
    int operator+(int num)
    {
        return this->+ num;
 
    }
 
 
    friend int operator +(int aa, const A&bb);
 
};
 
int operator+(int aa, const A&bb) {
 
    
    return aa + bb.a;
 
}
void main() {
 
    A aa(3);
 
 
    cout << aa + 10 << endl; //aa.operator+(10) 멤버함수 
    cout << 10 + aa << endl; // operator + (10,aa)외부함수
 
    
 
}
cs

 

'C++ ' 카테고리의 다른 글

iostream operator function overloading  (0) 2018.09.20
대입연산자  (0) 2018.09.19
Friend  (0) 2018.09.19
Has~a exercise  (0) 2018.09.18
Has~A  (0) 2018.09.18