Data+

1. Template

by Qerogram

* Template 사용 함수보다, 일반 함수가 우선권을 갖는다(동일 명칭이라면 즉, Overloading 된 것이라면)

1. Stack 구현을 통한 Generic Class 선언.

template <class T> 를 선언함으로,

MyStack 객체 생성시 <char>, <int>, <double> 따위 지정가능.


1-1. char 예시.

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
#include <iostream>
#define Su 15
using namespace std;
template <class T>
class MyStack {
public:
  T List[Su] = {0,};
  void PUSH(T arr[], int Index) {
    for(int i = 0; i < Index; ++i)
      *(List+i) = *(arr+Index-1-i);
  }
  void disp() {
    for(int i=0; i < Su; ++i) {
      cout << *(List+i);
    }
  }
};
int main(int argc, char* argv[]) {
  char arr[Su] = {0, };
  MyStack<char> Stack;
  for(int i = 0; i < Su; ++i) {
    *(arr+i) = 96+i+1;
  }
  
  Stack.PUSH(arr, Su);
  Stack.disp();
  return 0;
}
cs

* 결과

onmlkjihgfedcba 


1-2. int의 경우.

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
#include <iostream>
#define Su 15
using namespace std;
template <class T>
class MyStack {
public:
  T List[Su] = {0,};
  void PUSH(T arr[], int Index) {
    for(int i = 0; i < Index; ++i)
      *(List+i) = *(arr+Index-1-i);
  }
  void disp() {
    for(int i=0; i < Su; ++i) {
      cout << *(List+i);
    }
  }
};
int main(int argc, char* argv[]) {
  int arr[Su] = {0, };
  MyStack<int> Stack;
  for(int i = 0; i < Su; ++i) {
    *(arr+i) = 96+i+1;
  }
  
  Stack.PUSH(arr, Su);
  Stack.disp();
  return 0;
}
cs

* 결과

111110109108107106105104103102101100999897   


2. Template 內 Generic Type이 2개 이상인 경우, 복사에 많이 이용된다.

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
#include <iostream>
#define Su 15
using namespace std;
 
template <class T1, class T2>
 
void Copy(T1 Source[], T2 Destination[], int __Size__) {
  for(int Start = 0; Start < __Size__; ++Start) *(Destination+Start) = (T2)*(Source+Start);
}
 
int main(int argc, char* argv[]) {
  int arr[Su] = {0, };
  double arr2[Su] = {0, };
  
  for(int i = 0; i < Su; ++i) {
    *(arr+i) = i;
    *(arr2+Su-i-1= 1.1*i;
  }
  
  for(int i = 0; i < Su; ++i) cout << *(arr+i);
  cout << endl;
  for(int i = 0; i < Su; ++i) cout << *(arr2+i);
  cout << endl;
  Copy(arr2, arr, Su);
  for(int i = 0; i < Su; ++i) cout << *(arr+i);
  cout << endl;
  for(int i = 0; i < Su; ++i) cout << *(arr2+i);
  cout << endl;
  return 0;
}
cs

*결과

01234567891011121314 15.414.313.212.1119.98.87.76.65.54.43.32.21.10 15141312119876543210 15.414.313.212.1119.98.87.76.65.54.43.32.21.10


'코딩 > C&C++' 카테고리의 다른 글

6. Quick Sort  (0) 2017.04.10
5. void PTR  (0) 2017.04.09
4. 다형성  (0) 2017.04.09
3. 복사생성자를 통한 깊은 복사.  (0) 2017.04.08
2. 연산자 오버로딩(Overloading)  (0) 2017.04.08

블로그의 정보

Data+

Qerogram

활동하기