함수 마무리

 

인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!

 

 


 

오버 로딩

 

오버로딩은 중복 정의이다. 함수 이름의 재사용을 의미한다.

 


 

오버 로딩과 오버라이딩의 차이

 

함수 오버로딩(Overloading)오버라이딩(Overriding)은 객체 지향 프로그래밍에서 중요한 개념이다.

 

함수 오버로딩(Overloading)하나의 클래스 내에서 같은 이름을 가진 함수를 여러 개 정의하는 것을 의미한다. 이때 함수의 매개변수의 수나 타입, 반환값의 타입 등을 다르게 정의하여 사용합니다. 이렇게 정의된 여러 개의 함수 중에서 호출 시 전달된 인자와 가장 일치하는 함수가 호출된다.

 

예를 들어, C++에서 정수형 변수 두 개를 더하는 함수와 실수형 변수 두 개를 더하는 함수를 같은 이름으로 정의할 수 있다. 호출 시 전달된 인자의 타입에 따라 적절한 함수가 호출된다.

 

반면에 오버라이딩(Overriding)상위 클래스에서 정의된 함수를 하위 클래스에서 재정의하는 것을 의미한다. 이때 하위 클래스에서 재정의된 함수는 상위 클래스에서 정의된 함수와 이름, 매개변수, 반환값이 같아야 한다. 하위 클래스에서 재정의된 함수가 호출될 때는 하위 클래스의 함수가 호출된다.

 

예를 들어, java에서 상위 클래스인 동물 클래스에서 정의된 소리를 내는 함수를 하위 클래스인 강아지 클래스에서 다시 정의할 수 있다. 이때 강아지 클래스에서 재정의된 함수가 호출되면 강아지 클래스에서 정의된 함수가 호출된다.

 

 

구분  오버로딩((Overloading)  오버라이딩(Overriding) 
메소드 이름  = =
매개변수, 타입  다름  =
리턴 타입  상관없음  =

 


 

오버 로딩 예시 1

 

더보기
#include <iostream>
using namespace std;

// 함수 마무리

// 오버 로딩 (중복 정의 : 함수 이름의 재사용)

int Add(int a, int b)
{
    int result = a + b;
    return result;
}

float AddFloat(float a, float b)
{
    float result = a + b;
    return result;
}

int main()
{
    int result1 = Add(1.5f, 2.1f);   // 매개변수 타입이 달라서 위의 함수에서 정수 1, 2로 계산된다.
    float result2 = AddFloat(1.5f, 2.1f);
    cout << result1 << endl;
    cout << result2 << endl;


    return 0;
}

 

 


 

오버 로딩 예시 2

 

더보기
#include <iostream>
using namespace std;
// 오버 로딩 (중복 정의 : 함수 이름의 재사용)
// - 매개변수 갯수가 다르거나
// - 매개변수 타입이 다르거나 (순서가 다른걸 포함)

int Add(int a, int b)         
{
    int result = a + b;
    return result;
}

float Add(float a, float b)  //앞부분이 같아도 뒷부분(매개변수 부분)이 다르면 문제없다.
{
    float result = a + b;
    return result;
}

// 기본 인자값
void SetPlayerInfo(int hp, int mp, int attack, int guildId = 1, int castleId=2)   // int guildId = 0 기본값 셋팅, 기본값을 셋팅하는 매개 변수는 뒷쪽으로 몰아줘야 한다
{
}

// 스택 오버플로우

int Factorial(int n)
{
    if (n <= 1)
        return 1;

    return n * Factorial(n - 1);
}

int main()
{
    float result1 = Add(1.5f, 2.1f);
    cout << result1 << endl;

    SetPlayerInfo(100, 40, 10, 0, 1);

    int result2 = Factorial(5); // Factorial(100000) 큰 값을 넣으면 스택 오버플로우 발생 
    cout << result2 << endl;

    // 5! = 5*4*3*2*1
    // n! = n * (n-1)!

    return 0;
}

 

Factorial(100000)와 같이 큰 값을 재귀함수로 사용하면 스택오버플로우(stackoverflow)가 발생한다.

 

 

 

 

 

 

 

'⭐ Programming > C++' 카테고리의 다른 글

[C++] 포인터 #1  (0) 2022.03.24
[C++] TextRPG  (0) 2022.03.24
[C++] 호출 스택  (0) 2022.03.22
[C++] 호출 스택  (0) 2022.03.22
[C++] 지역변수와 값 전달  (0) 2022.03.21