함수 오버로딩
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 |