본문 바로가기

숙제

C++ 숙제(오버로딩 된 함수 템플릿으로 변경하기)

오버로딩된 함수를 템플릿으로 변경해 봅시다.

우리는 타입이 동일한 두 개의 인자를 받고 이를 더해서 반환하는 템플릿 함수를 구현해야 합니다.

기존에 제공된 오버로딩 된 함수를 분석해서 하나의 템플릿 함수로 구현하시면 됩니다.

//템플릿 함수로 변경해야 할 오버로딩 된 함수
#include <iostream>

using namespace std;

//아래 3개의 함수를 하나의 템플릿 함수로 통합하세요
int add(int a, int b) {
    return a + b;
}

double add(double a, double b) {
    return a + b;
}

std::string add(const std::string& a, const std::string& b) {
    return a + b;
}


//아래 테스트 코드는 변역하지 마세요
int main() {
    // 정수 더하기
    cout << "3 + 5 = " << add(3, 5) << endl;

    // 실수 더하기
    cout << "2.5 + 4.3 = " << add(2.5, 4.3) << endl;

    // 문자열 합치기
    cout << "\"Hello, \" + \"World!\" = " << add(string("Hello, "), string("World!")) << endl;

    // 아래 코드는 컴파일 에러가 발생해야 함
    // cout << add(true, false) << endl;

    return 0;
}

#include <iostream>

using namespace std;

//아래 3개의 함수를 하나의 템플릿 함수로 통합하세요
//int add(int a, int b) {
//    return a + b;
//}
//
//double add(double a, double b) {
//    return a + b;
//}
//
//std::string add(const std::string& a, const std::string& b) {
//    return a + b;
//}

template<typename T>
T add(T a, T b)
{
    return a + b;
}


//아래 테스트 코드는 변역하지 마세요
int main()
{
    // 정수 더하기
    cout << "3 + 5 = " << add(3, 5) << endl;

    // 실수 더하기
    cout << "2.5 + 4.3 = " << add(2.5, 4.3) << endl;

    // 문자열 합치기
    cout << "\"Hello, \" + \"World!\" = " << add(string("Hello, "), string("World!")) << endl;

    // 아래 코드는 컴파일 에러가 발생해야 함
    cout << add(true, false) << endl; // 에러가 발생안하고 1이 출력된다.

    return 0;
}

요구 사항중 맨 아래줄인 cout << add(true, false) << endl; 에서 컴파일 에러가 떠야한다고 하는데 오류가 발생하지 않아서 뭐가 틀렸나 하고 답지를 봤지만 똑같다. 답지의 오류코드의 주석을 풀고 그대로 실행해도 오류가 발생하지 않는다.