함수 오버로딩 ( function overloading)
디폴트 인수가 인수의 개수를 달리하여 같은 함수를 호출하는 것이라면,
함수 오버로딩은 같은 이름의 함수를 중복하여 정의하는 것을 의미한다.
객체 지향 프로그래밍의 특징 중 바로 다형성(polymorphism)의 구현이다.
1. void Display(const char* str, int n); // 문자열 str을 n번 출력함.
2. void Display(const char* str1, const char* str2); // 문자열 str1과 str2를 연달아 출력함.
3. void Display(int x, int y); // x * y를 출력함.
4. void Display(double x, double y); // x / y를 출력함.
함수의 오버로딩은 매개변수의 타입뿐만 아니라 매개변수의 개수를 달리해도 작성 할 수 있다.
void Shift(int, int);
void Shift(int, int, int);
void Shift(int, int, int, int);
int main(void)
{
Shift(1, 2);
Shift(1, 2, 3);
Shift(1, 2, 3, 4);
return 0;
}
유효 범위 (scope)
하나의 변환 단위내에서 해당 변수가 사용될 수 있는 범위
함수 내에서 선언된 변수는 함수 내에서만 사용할 수 있다.
또한, 함수 밖에서 선언된 변수는 변수가 선언된 이후에 나오는 모든 함수에서 사용할 수 있다.
클래스(class)
클래스란 구조체의 상위 호환으로 이해할 수 있다.
c++에서 구조체와 클래스의 차이는 기본 접근 제어의 차이일 뿐, 나머지는 거의 같다.
객체지향 프로그래밍(OOP)
모든 데이터를 객체(object)로 취급하며, 객체가 바로 프로그래밍의 중심이 된다.
객체란?
실생활에서 우리가 인식할 수 있는 사물로 이해할 수 있다.
이러한 객체의 상태와 행동을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그래밍이다.
또한, 이와 같은 객체를 만들어 내기 위한 틀과 같은 개념이 바로 클래스이다.
객체 지향 프로그래밍의 특징
- 추상화
- 캡슐화
- 정보 은닉
- 상속성
- 다형성
인스턴스(instance)
C++에서 클래스는 구조체와 마찬가지로 사용자가 정의할 수 있는 일종의 타입이다.
따라서 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체를 선언해야 한다.
이렇게 선언된 해당 클래스 타입의 객체를 인스턴스(instance), 메모리에 대입된 객체를 의미한다.
하나의 클래스에서 여러 개의 인스턴스를 생성할 수 있다.
이러한 인스턴스는 독립된 메모리 공간에 저장된 자신만의 멤버 변수를 가지지만,
멤버 함수는 모두 인스턴스가 공유한다.