반응형


operator 연습해보기


http://www.crocus.co.kr/1193?category=278487




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
41
42
43
44
45
#include <iostream>
 
using namespace std;
 
class Point
{
private:
    int x, y;
 
public:
    Point(int x_ = 0int y_ = 0// 생성자 아무것도 없으면 0,0넣는다.
    {
        x = x_;
        y = y_;
    }
 
    void ShowPosition();
    void operator+(int val); // 연산자 오버로딩 선언 
};
 
// 클래스 함수 내용
void Point::ShowPosition()
{
    cout << x << " " << y << endl;
}
 
void Point::operator+(int val)
{
    x += val;
    y += val;
 
}
 
int main()
{
    Point p(34);
    p.ShowPosition();
 
    p.operator+(10);
    p.ShowPosition();
 
   &nbscsp;return 0;
}
 
 
Crocus



Point 클래스를 p라는 이름으로 선언해주고 생성자로 (3,4)를 넣어준다.


(3,4)를 해주지 않으면 자동으로 생성자 정의에 의해 0,0이 들어간다.


그리고 p클래스 내부의 ShowPosition함수로 x,y값을 cout하고(즉, 현재값 보여준 상태)


그다음 p.operator+(10)을 통해 연산자 오버로딩을 하였다.


이 연산자 오버로딩의 내용은


private의 x와 y에 10씩 더하라는 의미가 된다.


그리고 난 뒤, p.ShowPosition();으로 호출 하였다.
















<< 멤버 함수에 의한 오버로딩 >>


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
41
42
43
44
 
#include <iostream>
 
using namespace std;
 
class Point
{
private:
    int x, y;
 
public:
    Point(int x_ = 0int y_ = 0// 생성자 아무것도 없으면 0,0넣는다.
    {
        x = x_;
        y = y_;
    }
 
    void ShowPosition();
    Point operator+(const Point& p); // 멤버 함수에 의한 연산자 오버로딩 선언 
};
 
// 클래스 함수 내용
void Point::ShowPosition()
{
    cout << x << " " << y << endl;
}
 
Point Point::operator+(const Point &p)
{
    Point temp(x + (p.x), y + (p.y));
  return temp;
}
 
int main()
{
    Point p1(12); // p1은 1,2로 초기화
    Point p2(34); // p2는 3,4로 초기화
    Point p3 = p1 + p2; // p3은 p1+p2가 나오는 값(연산자 오버로딩 이용)
    
    p3.ShowPosition();
 
    return 0;
}
 
Crocus




Point p3 = p1 + p2; 에서 p1 + p2를 cpp가 보게된다.


이때 p1+p2가 말이안되니


cpp는 operator+라고 생각하고 cpp는 p1.operator+(p2)라고 생각한다.


즉 후자를 인자로 생각하고 전자를 클래스에 있는 함수로 호출한다.

(p1 클래스에 있는 operator+함수에 p2를 넣어라.)


이때 Point operator+(const Point &p);에서 &는 참조이다.


즉, 여기서는 p2를 참조하여 받겠다는 의미다.


그리고 나서 Point temp라는 클래스에 생성자로(x+(p.x), y+(p.y))를 넣어준다.


즉 여기는 p1 클래스 속이니 x는 p1의 x이고 p.x는 참조받은 p2의 x이다.


그 후 temp에 있는 x,y값을 return 해주어서 그 값을 p3의 x,y에 넣는것이다.




반응형