본문 바로가기
프로그래밍/C++

C++ 오버로딩? 그게 뭘까?

by Hwan2 2019. 3. 4.
반응형

 

 

 

 

오버로딩이란?

 

객체지향 언어의 특성 중 하나로 같은 이름의 함수를 여러 개 만들 수 있는걸 말합니다.

 

단!! 조건이 있는데 

 

※매개 변수를 무조건 다르게 정해줘야 하는 것입니다.

 

 

 

예시를 통해 확인해 보도록 하겠습니다.

 

 

정상적인 오버로딩.

 

#include<iostream>

using namespace std;

void fct_1(void) {
    cout << "나는 fct_1()!!" << endl;
}

void fct_1(int num) {
    cout << "나는 fct_1(int num!!) : " << num << endl;
}


int main(void) {

    fct_1();

    fct_1(111);

    return 0;
}
 

 

잘 작동하는걸 알 수 있습니다. 이름은 같지만 매개 변수는 다릅니다.

아주 정상적인 오버로딩입니다.

 

 

 

 

이번엔 오버로딩의 조건을 무시해 보겠습니다.

#include<iostream>

using namespace std;

void fct_1(void) {
    cout << "나는 fct_1()!!" << endl;
}

int fct_1(void) {
    cout << "나는 fct_1(int num!!) : " << num << endl;

    return num;
}


int main(void) {

    fct_1();

    fct_1(111);             // 컴파일 에러!!

    return 0;
}
 

 

컴파일 에러가 뜹니다.

 

반환 값이 달라서 에러가 뜨는 것이 아니라 매개변수가 동일해서 에러가 뜨는 것입니다.

 

즉, 반환 값이 달라져도 매개 변수가 같다면 이건 오류 입니다.

 

 

 

그럼 반환 값도 다르고 매개변수도 다른 경우를 보겠습니다.

#include<iostream>

using namespace std;

void fct_1(void) {
    cout << "나는 fct_1()!!" << endl;
}

int fct_1(int num) {
    cout << "나는 fct_1(int num!!) : " << num << endl;

    return num;
}


int main(void) {

    int num;

    fct_1();

    num = fct_1(111);

    cout << "main의 num : " << num << endl;

    return 0;
}
 

 

아주 잘 동작 합니다.

 

 

여기서 기억해야 할 것은 무!조!건! 함수 오버로딩을 할 시 반환값의 자료형은 동일해야 하고, 매개변수는 달라야 한다. 를 짚고 넘어가시면 좋을 것 같습니다.

 

또한 함수 오버로딩은 Class에서의 함수에도 동일하게 적용되며 생성자에도 동일하게 적용되는 사항입니다.

 

 

 

 

 

 

 

반응형

'프로그래밍 > C++' 카테고리의 다른 글

C++ virtual 함수란?  (0) 2019.03.11
C++ 오버라이딩?? 이건 또 뭘까?  (0) 2019.03.04
C++ 복사 생성자, 왜 그렇게 생겼냐?  (4) 2019.02.24
C++ 소멸자란?  (0) 2019.02.22
C++ this 포인터?? 그럼 *this 는 뭐지?  (8) 2019.02.22

댓글


스킨편집 -> html 편집에서