C++에서는 같은 이름의 함수를 여러 개 정의할 수 있다
인자의 타입이나 개수에 따라 적합한 함수가 자동으로 선택됨
오버로딩 규칙:
void print(int x);
void print(double x); // 이름은 다 같은 함수지만
void print(char x); // 인자의 종류가 다름
void print(int x, char y);
int main() {
int a = 3;
double b = 2.5;
char c = 7;
print(a); // int 버전 호출
print(b); // double 버전 호출
print(c); // char 버전 호출
print(a, c); // 마지막 print 호출
}
클래스는 struct와 마찬가지로 새로운 자료형(사용자 정의 타입)을 만드는 도구
멤버 변수(데이터)와 멤버 함수(동작)를 묶어서 객체지향 프로그래밍의 기본 단위를 제공
클래스 정의로부터 실제 데이터를 담는 객체(인스턴스)를 생성
클래스를 기반으로 객체를 선언하면, 생성자(constructor)가 자동으로 호출되어 객체를 초기화
생성자는 클래스 이름과 동일하며 반환형이 없다
class Date {
public:
Date(int year, int month, int day) // 생성자는 꼭 public에 위치
{ /* 객체 초기화 코드*/ }
};
int main() {
Date day1(2025, 5, 12); // 생성자 호출, day1 객체 생성 (암시적)
Date day2 = Date(2025, 5, 12); // 명시적 방법. 위와 완전 동일
}
class Date {
public:
// Date(int year, int month, int date) { ... } 이런 생성자가 없거나
Date() = default; // 명시적으로 생성자를 default로 할 경우
};
int main() {
Date day1; // day1객체에는 쓰레기 값이 들어간다
}
class Date {
public:
Date() { /* 정해진 기본값으로 초기화 */ }
Date(int year, int month, int day) { /* 전달값으로 초기화 */ }
};
int main() {
Date d1; // 인자 없기에 기본 생성자 호출. d1은 기본값으로 초기화
Date d2(2025, 5, 12); // d2는 전달값(2025, 5, 12)로 초기화됨
}
Date d; 또는 Date d(2025,5,12);는 객체 생성(생성자 호출)
인자 없이 객체를 생성할 때 Date d();로 할 경우, 객체가 아니라 반환형이 Date인 함수 d의 선언으로 해석된다
생성자를 정의하지 않았거나 인자 없는 생성자라면 Date* ptr = new Date;
매개변수 있는 생성자의 경우Date* ptr = new Date(값,값,값);
delete ptr로 메모리 해제