반응형
함수 오버로딩(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 |