[열혈 C++] Chap13 연습문제
13-1 [함수 템플릿 정의]
-
코드💻
/* 문제1 인자로 전달되는 두 변수에 저장된 값을 서로 교환하는 SwapData라는 이름의 함수를 템플릿으로 정의해보고자 한다 다음 Point 클래스를 대상으로 값의 교환이 이뤄짐을 확인할 수 있도록 main을 구성한다 */ #include <iostream> using namespace std; class Point { private: int xpos, ypos; public: Point(int x = 0, int y = 0) : xpos(x), ypos(y) { } void ShowPosition() const { cout << '[' << xpos << ", " << ypos << ']' << endl; } }; template<typename T> void SwapData(T& data1, T& data2) { T tmp = data1; data1 = data2; data2 = tmp; } int main(void) { Point pos1(1, 2); Point pos2(4, 5); pos1.ShowPosition(); pos2.ShowPosition(); SwapData<Point>(pos1, pos2); pos1.ShowPosition(); pos2.ShowPosition(); return 0; }
/* 문제 2 int형 배열에 저장된 값을 모두 더해서 그 결과를 반환하는 기능의 함수가 있다 int SumArray(int arr[], int len) { int sum = 0; for (int i = 0; i < len; i++) { sum += arr[i]; } return sum; } 이 함수를 템플릿으로 정의하여 다양한 자료형의 배열을 대상으로 합을 계산하는 예제를 작성해보자 */ #include<iostream> using namespace std; template<class T> T SumArray(const T arr[], const int len) { T sum = 0; for (int i = 0; i < len; i++) { sum += arr[i]; } return sum; } int main(void) { int iArr[10] = { 1,2,3,4,5,6,7,8,9,10 }; cout << "iArr Sum : " << SumArray<int>(iArr, 10) << endl; double dArr[5] = { 3.5,2.4,6.8,2.2,5.5 }; cout << "dArr Sum : " << SumArray<double>(dArr, 5) << endl; }