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