Minwoo Dev.

[C++] 윤성우의 열혈 C++ 13-1 함수 템플릿의 정의 문제풀이 본문

C++

[C++] 윤성우의 열혈 C++ 13-1 함수 템플릿의 정의 문제풀이

itisminu 2024. 7. 23. 14:09
728x90
반응형
SMALL

문제 1

인자로 전달되는 두 변수에 저장된 값을 서로 교환하는 SwapData라는 이름의 함수를 템플릿으로 정의해보자.

그리고 다음 Point클래스를 대상으로 값의 교환이 이뤄짐을 확인할 수 있도록 main 함수를 구성해보자.

 

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;
    }
};

 

 

정답

#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 <class T>
void SwapData(T *v1, T *v2){
    T temp = *v1;
    *v1 = *v2;
    *v2 = temp;
}


int main(void){
    Point pos1(3, 4);
    Point pos2(7, 5);
    SwapData(&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 <typename T>
T SumArray(T arr[], int len){
    T sum = 0;
    for (int i = 0; i < len;i++)
        sum += arr[i];
    return sum;
}

int main(void){
    int arr1[5] = {1, 2, 3, 4, 5};
    cout << SumArray(arr1, 5) << endl;
    double arr2[5] = {4.2, 2.1, 2.2, 5.7, 5.3};
    cout << SumArray(arr2, 5) << endl;
    return 0;
}

 

 

실행 결과

728x90
반응형
LIST