반응형

 

함수 오버로딩(Function overloading)

- C에서는 동일한 이름의 함수가 정의되는것을 허용하지 않는다.

- C++에서는 함수에 전달되는 인자를 통해서 호출하려는 함수의 구분이 가능하다.

- 그렇기 때문에 매개변수의 선언형태가 다르다면 동일한 이름의 함수를 정의할 수 있다.

  ※ C에서는 함수의 이름만 이용해서 호출되는 대상을 찾는 반면, C++에서는 함수의 이름과 매개변수 선언 두 가지 정보를 이용해 호출 대상을 찾는다.

#include <iostream>
using namespace std;

void Func(int n)
{
    cout << n << endl;
}

void Func(char c)
{
    cout << c << endl;
}

void main()
{
    Func(10);
    Func('A');
    
    //결과
    //10
    //A
}

 

 

 

 

Default 매개변수

- 단어 그대로 기본적으로 설정되어 있는 매개변수라고 생각하면 된다.

- 함수를 호출했을 때, 매개변수 값을 전달하지 않으면 자동으로 기본값을 가진다.

- Default 값은 함수의 원형에만 위치시켜야한다.

#include <iostream>
using namespace std;

class Test
{
public:
    void Func(int n1 = 10, int n2 = 20);
};

void Test::Func(int n1, int n2)
{
    cout << n1 + n2 << endl;
}

void main()
{
    Test test;
    test.Func();
    
    //결과 30
}

 

 

부분적 Defualt 값 설정

- 반드시 모든 매개변수가 Default 값을 가질 필요는 없다.

- 다음과 같은 경우에 부분적 Default 값을 저장할 수 있다.

  • 반드시 오른쪽 매개변수의 Default 값부터 채우는 형태로 정의한다.
void Func(int n1, int n2 = 20, int n3 = 10)
  • Default 매개변수로 인해 형성되는 모호한 오버로딩은 허용하지 않는다.
#include <iostream>
using namespace std;

class Test
{
public:
    void Func();
    void Func(int n1 = 10, int n2 = 20);
};

void Test::Func()
{
    cout << 100 << endl;
}

void Test::Func(int n1, int n2)
{
    cout << n1 + n2 << endl;
}

void main()
{
    Test test;
    test.Func(); //에러
}
반응형

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

C++ 업캐스팅, 오버라이딩, 가상함수  (0) 2021.11.08
C++ 클래스 상속  (0) 2021.11.04
C++ this 포인터  (0) 2021.10.24
C++ 복사 생성자 심화  (0) 2021.10.17
C++ 파일 입출력 ofstream, ifstream  (0) 2021.10.16

+ Recent posts