본문 바로가기

개발공부

2024-12-23 c++ 함수 오버로딩, 템플릿

 

 

 

함수 오버로딩

c++에서는 동일한 이름의 함수를 만들 수 있습니다.

그러기위해서는

 

매개변수타입과 개수가 달라야합니다.

 

 

#include <iostream>
using namespace std;

//int 타입
void test(int a)
{
    cout << a << endl;
}

//float 타입
void test(float a)
{
    cout << a << endl;
}

//string 타입
void test(string a)
{
    cout << a << endl;
}

//2개 더하기
void test(int a, int b)
{
    cout << a +b<< endl;
}
//3개 더하기
void test(int a, int b,int c)
{
    cout << a + b  + c<< endl;
}

int main() {
    test(1);
    test(1.1f);
    test("10");
	test(1+1);
    test(1+1+1);
    
    return 0;
}

 

 

이런식으로 함수 매개변수에 따라 같은 함수명이여도 다르게 사용 가능합니다.

 

아래의 방식들은 컴파일 에러가 발생합니다.

 

 

반환 타입만 다른 경우

int fail(){
	return 1;
}

float fail(){
	return 1.1f;
}

 

 

디폴트 매개변수가 있는 함수

void fail(int a = 1){
	cout << a << endl;
}
void fail(){
	cout << "a" << endl;
}

매개변수의 타입이 포인터와 배열로 다를 경우

void fail(int* arr){
	cout << "포인터" <<endl;
}
void fail(int arr[]){
	cout << "배열" <<endl;
}

이것말고도 오류가 생기는 건 더욱 있겠지만 이게 대표적 입니다.

 

 

템플릿

 

 

템플릿 문법을 사용하여 타입(변수 타입)에 의존하지 않는프로그래밍이 가능합니다.

일반화된 코드를 작성할 수 있는 문법입니다.

 

내가 정의할 함수 위에 아래를 추가해주면 됩니다.

template <typename T>

어떤 타입 T 라는 의미입니다. 즉 T에는 int , flaot ,class 등의 타입중 작성자가 원하는

 타입을 T라는 임의의이름으로 부르겠다는 겁니다.

 

void add(int a , int b)

void add(float a , float b)

등을 

void add(T a , T b)

 

이렇게 매개변수 T로 혹은 반환값을 T로 바꿀 수 있습니다.

 

사용법

#include <iostream>
using namespace std;


//타입이름 T로 정하겠음
template <typename T>
T add(T x , T y){
	return x + y;
}

tamplate <typename T>
T getMax(T a , T b){
	return (a > b ) ? a : b;
}



int main(){

//정수 , 실수형 덧셈
	cout << add(1, 2)<< endl;
    cout << add(1.1, 2.2)<< endl;
    
    //비교
    cout << getMax(5, 10)<< endl;
    cout << getMax(5.5, 10.5)<< endl;
    cout << getMax('a', 'A')<< endl;
    
	return 0
}

 

 

템플릿 클래스

클래스도 템플릿화 할 수 있습니다.

#include <iostream>
using namespace std;

template <typename T>
class MyArray {
private:
	T* a;
    int b;
    
public :

	MyArray(T c , int d) : a(c), b(d){
    }
    ~MyArray(){
    	delete a;
    
    }

 

 

 

'개발공부' 카테고리의 다른 글

2024- 12 - 31 버블 정렬  (0) 2024.12.31
2024 - 12 -24 객체지향적 설계  (2) 2024.12.24
2024-12-23 c++ 얕은 복사 , 깊은 복사  (0) 2024.12.23
2024 -12 - 23 c++ 자원 관리  (0) 2024.12.23
2024 - 12 - 20 Unreal (오버랩)  (0) 2024.12.20