인자로 들어오는 변수의 타입에 따라 이름이 같은 함수들 중 적합한 함수를 호출해 주는 기능
#include <iostream>
void print(int x) { std::cout << "int : " << x << std::endl; }
void print(char x) { std::cout << "char : " << x << std::endl; }
void print(double x) { std::cout << "double : " << x << std::endl; }
int main()
{
int a = 1;
char b = 'c';
double c = 3.141592f;
print(a);
print(b);
print(c);
return 0;
}
int : 1
char : c
double : 3.1415921. 자신의 타입과 정확히 일치하는 함수를 찾음
2. 정확히 일치하는 타입이 없는 경우 아래와 같은 형변환을 통해 일치하는 함수를 찾음
char, unsigned char, short는 int로 변환unsigned short는 int의 크기에 따라 int혹은 unsigned int로 변환float은 double로 변환enum은 int로 변환3. 위와 같이 변환해도 일치하는 것이 없다면 아래의 좀 더 포괄적인 형변활을 통해 일치하는 함수를 찾음
float -> int)Enum도 임의의 숫자 타입으로 변환 (e.g. Enum -> double)0은 포인터 타입이나 숫자 타입으로 변환된 0은 포인터 타입이나 숫자 타입으로 변환void 포인터로 변환4. 유저 정의된 타입 변환으로 일치하는 것을 찾는다.
만약 컴파일러가 위 과정을 통하더라도 일치하는 함수를 찾을 수 없거나 같은 단계에서 두 개 이상이 일치하는 경우에 모호하다(ambiguous) 라고 판단해서 오류가 발생하게 된다.
void print(int x) { std::cout << x << std::endl; }
void print(char x) { std::cout << x << std::endl; }
int main() {
double c = 4.2f;
print(c);
return 0;
}
생성자(Constructor)는 클래스를 인스턴스할 때 초기화 과정에서 호출되는 함수이다. 하지만 생성자 정의를 하지 않는다면, 디폴트 생성자(Default Constructor)가 호출된다.
사용자가 다른 생성자를 추가한다면 컴파일러는 자동으로 디폴트 생성자를 삽입하지 않는다.
C++11 부터 가능
class Test {
public:
Test() = default; // 디폴트 생성자를 정의해라
}