2019/c++

Template classes, operator overloading

fw93 2018. 3. 18. 11:40
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "stdafx.h"
#include <cstdio>
#define FUNC(X) X*X*X
 
using namespace std;
 
class cl1 {
public:
    int a;
    int b;
    cl1() {
        a = 0;
        b = 0;
    }
    cl1(int aa, int bb) {
        a = aa;
        b = bb;
    }
    cl1 operator+(cl1 &ref) {
        return cl1(a + ref.a, b + ref.b);
    }
    cl1 operator+(int sam) {
        return cl1(a + sam, b + sam);
    }
};
 
// 전역 선언은 양쪽 연산 가능하게 한다
cl1 operator+(int num, cl1 sam) {
    return cl1(sam.a + num, sam.b + num);
}

template<class T>
class queue {
private:
    T data1;
public:
    T adddata(T da);
    queue(T da);
    T getdata();
};
 
template<class T>
queue<T>::getdata() {
    return data1;
}
 
template<class T>
queue<T>::adddata(T da) {
    return da + data1;
}
 
template<class T>
queue<T>::queue(T da) {
    data1 = da;
}
 
int main() {
    queue<double> q1(3.14);
    cl1 sam2(23,24);
// 생성자에 넣으려면 미리 선언한 후에 그 변수를 삽입
    queue<cl1> q2(sam2);
    cl1 sam = q2.getdata();
    printf("%i %i\n", q2.getdata().a, q2.getdata().b);
    sam = sam2;
    printf("%d %d\n", sam.a, sam.b);
    printf("%f\n", q1.adddata(1.0));
    sam = q2.adddata(sam2);
    // 10+nb1 은 10.operator+(nb1)과 동치
    printf("%d %d\n", sam.a, sam.b);
    printf("%d\n", FUNC(3));
    sam = sam.operator+(32);
// 클래스 대입 가능하다. 서로 독립적
    sam = sam + 32;
    sam = 32 + sam;
    printf("%d %d\n", sam.a, sam.b);
    while (1) {}
    return 0;
}
cs


'2019 > c++' 카테고리의 다른 글

relational data structures & strings (C++ STL)  (0) 2018.03.21
dynamic allocation of 2-dimension array  (0) 2018.03.20
c++ reference variables  (0) 2018.03.18
time&chronos  (0) 2018.03.17
basic data structures  (0) 2018.03.17