내일배움캠프-언리얼

[내일배움캠프 - 언리얼] DAY 15 - 템플릿

이시보 2025. 12. 17. 15:34

함수 오버로딩

c++에서는 함수 이름과 매개변수 타입 정보를 함께 사용해 구분하기 때문에 동일한 이름의 함수를 여러 개 정의할 수 있다.

Name mangling : 함수 이름 구분을 위해 내부적으로 고유한 이름을 부여하는 것

 

함수 오버로딩이 가능해지는 조건

- 매개변수 타입이 다른 경우

- 매개변수 개수가 다른 경우

 

함수 오버로딩이 되지 않는 경우

- 타입 변환이 가능한 매개변수로 두 개 이상의 오버로딩된 함수가 호출 후보가 되는 경우

- 디폴트 매개변수로 인해 함수 호출 형태가 중복되는 경우

- 매개변수의 타입만 포인터와 배열로 다른 경우

- 함수의 변환 타입만 다른 경우

 

함수 오버로딩 순서

 

 

템플릿

template <typename T>

타입에 관계없이 일반화된 코드를 작성하기 위한 문법

// 목적: 함수 템플릿을 이용해 두 값을 더하는 일반화된 함수 작성하기
#include <iostream>
using namespace std;

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

int main() {
    cout << add(3, 5) << endl;        // 정수 더하기
    cout << add(2.5, 4.1) << endl;    // 실수 더하기
    return 0;
}

// 출력결과:
// 8
// 6.6

배열을 템플릿 클래스로 구현

// 목적: 클래스 템플릿으로 배열을 일반화하여 원소 추가 및 삭제 기능 구현하기
#include <iostream>
using namespace std;

template <typename T>
class Array {
    T data[100];
    int size;
public:
    Array() : size(0) {}

    void add(const T& element) {
        if(size < 100)
            data[size++] = element;
    }

    void remove() {
        if(size > 0)
            size--;
    }

    void print() {
        for(int i = 0; i < size; i++)
            cout << data[i] << " ";
        cout << endl;
    }
};

int main() {
    Array<int> arr; // 정수형 배열 생성
    arr.add(10);
    arr.add(20);
    arr.add(30);
    arr.print();

    arr.remove();
    arr.print();
    return 0;
}

// 출력결과:
// 10 20 30
// 10 20