#17 [c++] 템플릿2

정상준·2022년 11월 18일
0

c++

목록 보기
13/25

📝 두개의 제네릭 타입을 갖는 템플릿

#include <iostream>

using namespace std;

/*
1 2 3 4 5
*/

template <class T1, class T2>
void myCopy(T1 src[], T2 dest[], int n) {
	for (int i = 0; i < n; i++) {
		dest[i] = (T2)src[i];
	}
}

int main() {
	int x[] = { 1,2,3,4,5 };
	double d[5];

	myCopy(x, d, 5);

	for (int i = 0; i < 5; i++) { cout << d[i] << ' '; }
}

📝 중복 함수와 템플릿 우선 순위

#include <iostream>

using namespace std;

/*
1       2       3       4       5
*/

template <class T>
void print(T arr[], int n) {
	for (int i = 0; i < n; i++) {
		cout << arr[i] << '\t';
	}
}

void print(char arr[], int n) {
	for (int i = 0; i < n; i++) {
		cout << (int)arr[i] << '\t';
	}
}



int main() {
	char c[] = { 1,2,3,4,5 };
	//두 번째 메소드 실행, 첫 번째가 실행되면 아스키코드값이 나옴
	print(c, 5);
}

📝 제네릭 클래스

#include <iostream>

using namespace std;

/*
5
*/

template <class T>
class MyStack {
private:
	int tos;
	T data[100];
public:
	MyStack();
	void push(T element);
	T pop();
};

template<class T>
MyStack<T>::MyStack() {
	tos = -1;
}

template<class T>
void MyStack<T>::push(T element) {
	if (tos == 99) {
		cout << "stack full";
		return;
	}
	tos++;
	data[tos] = element;
}

template<class T>
T MyStack<T>::pop() {
	T retData;
	if (tos == -1) {
		cout << "stack empty";
		return 0;
	}
	else {
		retData = data[tos--];
		return retData;
	}
}



int main() {
	MyStack<int> iStack;
	iStack.push(5);
	cout << iStack.pop();
}
profile
안드로이드개발자

0개의 댓글