멋쟁이 개발자의 블로그

[C++] 함수 중복과 static 멤버 본문

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 멤버로 선언하여 캡슐화하기

 


5. static 멤버 함수의 특징

  1) static 멤버 함수는 객체가 생기기 전부터 호출 가능

  2) static 멤버 함수에서 non-static 멤버에 접근 불가
       : 아직 생성되지도 않은 non-static 멤버 변수에 접근 -> 오류
  2-1) 반대로 non-static 멤버 함수는 static 멤버 접근 가능

  3) this 사용 X