minjeong-oh
기록
minjeong-oh
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • ML & Neural Net (3)
    • ◼️GNN (1)
    • ◼️시계열 (1)
    • ◼️추천시스템 (0)
    • ◼️수학 (3)
    • Data Engineer (2)
    • ◼️Spark (1)
    • ◼️Kafka (1)
    • ◼️Elestic Search (0)
    • ◼️Redis (0)
    • ◼️ClickHouse (1)
    • Programming Language (4)
    • ◼️Git (1)
    • ◼️Python (1)
    • ◼️C++ (33)
    • ◼️Fortran 99 (2)
    • ◼️OpenGL (7)
    • ◼️MFC (35)
    • ◼️Flutter (46)
    • ◼️Kotlin (1)
    • ◼️Android (1)
    • ◼️Java (1)
    • ◼️C (4)
    • Development (0)
    • ◼️디자인패턴 (0)
    • ◼️네트워크 (2)
    • ◼️인증 (1)
    • Computer Science (4)
    • 알고리즘 문제풀이 (12)
    • SQL 고득점 Kit 문제풀이 (8)
    • 취업준비 (0)
    • Notion 정리 글 (1)
    • Article Scrap (3)
      • Careerly - Q&A (7)
      • Careerly - Post (2)
    • 기타 등등 (16)

블로그 메뉴

  • 글쓰기
  • 홈
  • 태그
  • 방명록
  • 편집

공지사항

인기 글

태그

  • 이것이C++이다책참고
  • 이차원구조체배열포인터
  • 인공지능개발자
  • 티스토리폰트배경색없애기
  • 19년식그램램장착
  • 구조체매개변수
  • 19년식그램SSD장착
  • mfc
  • OpenGL회전
  • AI배워야하나
  • 구조체배열포인터
  • API문서정리
  • NextJSSwagger
  • kafka구축
  • 그램풀스팩업그레이드
  • 그램업그레이드
  • SpringBootSwagger
  • GSLB
  • hello테마
  • 리눅스파티션

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
minjeong-oh

기록

◼️C++

[C++] 함수다중정의(오버로딩), 템플릿 함수

2023. 9. 5. 14:51

함수 다중 정의

  • Overloading = 다중 정의
  • 다중정의 : 하나의 함수 이름이 여러 의미를 동시에 갖는 것을 말한다.
  • 함수에서 다중 정의에 영향을 주는 것은 '매개변수'뿐이다. 
    반환형식만 다른 경우 또는 호출 규칙만 다른 경우는 다중 정의에 해당되지 않는다.

디폴트 매개변수와 다중 정의가 조합되면 발생되는 문제

void TestFun(int a){}
void TestFun(int a, int b=10){}
//이렇게 다중정의하는 것은 문제가 되지않지만 
//"제작자는 오류를 경험하지 않지만 함수 사용자는 오류를 경험할 수 있다."

int _tmain(int argc, _TCHAR* argv[]){
    TestFunc(5);   //호출이 모호해서 컴파일 오류가 발생  //이 코드를 주석처리하면 오류는 발생하지 않음
    return 0;
}

 

개발자 유의 사항

실력있는 프로그래머라면 자신이 만들어낸 함수나 객체를 사용하는 또 다른 개발자를 고려해야 한다는 점을 다시한번 강조하고 싶습니다. 심지어 사용자의 실수를 차단하기 위한 노력까지 해야합니다.

 


 

다중정의를 편하게 하기위한 함수 템플릿

  • 다중정의를 하는 이유는 사용자의 편의성과 확장성을 얻을 수 있기 때문
  • 사용자를 편하게 해주자고 제작자는 같은 일을 여러번 반복해야한다. 유지보수 측면에서더 심각한 문제
  • C++에서는 가급적이면 함수 다중 정의보다는 '함수 템플릿'을 사용하길 권한다.
  • 템플릿: 일종의 틀. 소스코드를 다중정의함수로 자동으로 생성하는 것.

 

>함수 템플릿 사용법

template <typename T>   //일반 함수위에 이 구문을 붙이는 것, T 자료형을 사용하는 템플릿이라는 의미
반환형 fun(매개변수){    //매개변수로 넘어오는 변수의 자료형으로 T자료형이 결정된다.
}

 

사용예

template <typename T>
T TestFunc(T a){
    std::cout << "매개변수 A: " << a << std::endl;  
    //cout객체는 알아서 변수 형식을 지정하지 않아도 출력이가능하므로, 
    //템플릿과 함께 사용하기 좋다. 
    return a;
}


int main(){
    std::cout << TestFunc(3);
    std::cout << TestFunc(3.3);
    std::cout << TestFunc('A');
    std::cout << TestFunc("TestString");
}


이렇게 호출자가 어떤 실인수로 TestFunc()함수를 호출하는가에 따라 컴파일러가 
자동으로 자료형을 해석하여 다중 정의 함수가 생성된다.
만약 호출하지 않으면 함수가 생성되지 않는 것이다.

컴파일러가 인식하지 않고 바로 자료형을 지정해주려면 아래처럼 하면된다. 
(컴파일러가 자료형을 인식하지 않아도돼서 더 빠를려나?)
std::cout << TestFunc<int>(3)


---------------------------------------------------------------------------
템플릿을 사용하지 않았을 경우 위 main코드를 사용하려면 
아래처럼 같은 기능을하는 함수를 다 정의해줘야하는 번거로움이있다.

int TestFunc(int a)
double TestFunc(double a)
char TestFunc(char a)
string TestFunc(string a)

템플릿을 사용하면 같은일을 하는 코드가 여러 번 등장할 필요가 없어졌기 때문에 안정적인 구조라고 할 수 있다.

 

 

 

템플릿 함수 참고: https://musket-ade.tistory.com/entry/C-%ED%95%A8%EC%88%98-%ED%85%9C%ED%94%8C%EB%A6%BFFunction-Template%EA%B3%BC-%ED%85%9C%ED%94%8C%EB%A6%BF-%ED%95%A8%EC%88%98Template-Function

 

 

더보기
 

Visual Studio C++ 사전

c++ 공부 내용을 지속해서 추가하는 게시글입니다. 참고 책 Part1. C에서 C++로 문법 전환하기 Chap1. C와는 다른 C++ [C++] Hello world 출력해보기 [C++] 여러 변수 출력하기 [C++] Visual Studio 에서 추가로 사용

genius-duck-coding-story.tistory.com

'◼️C++' 카테고리의 다른 글

[C++] 네임스페이스, using, 네임스페이스 중첩, 네임스페이스 다중정의  (0) 2023.09.06
[C++] 인라인 함수  (0) 2023.09.05
[C++] 디폴트 매개변수  (0) 2023.09.05
[C++] 소숫점 아랫자리 버리기. 정확하지 않은 실수 연산 해결하기  (0) 2023.09.04
[C++] 범위 기반 for 문 for(auto n : nList)  (0) 2023.08.31

    티스토리툴바