멋쟁이 개발자의 블로그
[C++] 함수 중복과 static 멤버 본문
// 명품 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 멤버로 선언하여 캡슐화하기
5. static 멤버 함수의 특징
1) static 멤버 함수는 객체가 생기기 전부터 호출 가능
2) static 멤버 함수에서 non-static 멤버에 접근 불가
: 아직 생성되지도 않은 non-static 멤버 변수에 접근 -> 오류
2-1) 반대로 non-static 멤버 함수는 static 멤버 접근 가능
3) this 사용 X
'Language > C++' 카테고리의 다른 글
명품 C++ 프로그래밍 :: 2장 실습 문제 (0) | 2020.10.12 |
---|---|
명품 C++ 프로그래밍 :: 1장 실습 문제 (0) | 2020.10.12 |
[C++ 기초] cout, cin, endl, string (0) | 2020.07.15 |