Language/C++
[C++] 함수 중복과 static 멤버
y_MIN
2020. 10. 23. 00:38
// 명품 C++ 프로그래밍 6장 - 함수 중복과 static 멤버
1. 함수 중복 : 다형성(다중화)
1) 중복 함수 조건
- 중복 함수들의 이름이 동일
- 중복 함수들은 매개 변수의 타입/개수가 달라야 함
- 리턴 타입 고려 X
int sum(int a, int b, int c) // 함수 1 : int형 파라미터 3개
return a + b + c;
double sum(double a, double b) // 함수 2 : double형 파라미터 2개
return a + b;
int sum(int a, int b) // 함수 3 : int형 파라미터 2개
return a + b;
int main(void) {
cout << sum(2, 5, 3) << endl; // 함수 1로
cout << sum(12.5, 33.6) << endl; // 함수 2로
cout << sum(2, 6) << endl; // 함수 3으로
}
2) 생성자 함수 중복 (- 3, 4장에서 다룸)
2. 디폴트 매개 변수
1) 오른쪽부터 디폴트 값 채우기
int sum (int a, int b = 10, int c) // 컴파일 오류
int sum (int a, int b = 10, int c = 20) // 컴파일 성공
int sum (int a = 1, int b = 10, int c = 20) // 컴파일 성공
2) 함수 중복 간소화 (디폴트 매개 변수를 가진 함수는 같은 이름의 중복 함수들과 함께 선언 X)
class Circle{
...
public:
Circle(int r = 1) {radius = r;}
// Circle (int r = 1) {radius = r;} 중복된 함수와 함께 사용 불가
...
};
3. 함수 중복의 모호성
1) 형 변환으로 인한 모호성
- 함수의 매개 변수 타입과 파라미터 타입이 일치하지 않는 경우,
- 작은 타입 -> 큰 타입으로 자동 형 변환
- char -> int -> long -> flaot -> double
- 반대 방향은 안됨
2) 참조 매개 변수로 인한 모호성
3) 디폴트 매개 변수로 인한 모호성 : 위 2-2) 내용
4. static 멤버
1) 특성
- 프로그램이 시작할 때 생성, 종료할 때 소멸
- class 당 하나만 생김
- 모든 객체들이 공유
2) static 멤버 변수는 외부에 전역 변수로 선언되어야 함
class Person {
public:
int money; // 개인 돈
void addMoney(int money)
this->money += money;
static int sharedMoney; // 공금 (모든 객체들이 공유할 수 있음)
static void addShared(int n)
sharedMoney += n;
};
int Person::sharedMoney = 10; // 전역 공간에 static 멤버 변수
int main(void) {
...
3) 접근 방법
① 객체 이름이나 객체 포인터로 접근 : 객체.static멤버 or 객체포인터->static멤버
② 클래스명:: 으로 접근
4) 전역 변수와 전역 함수를 선언하지 말고 static 멤버로 선언하여 캡슐화하기