함수 중복과 static 멤버
1. 함수 중복 조건
중복된 함수들의 매개 변수 타입이 다르거나 개수가 달라야 함
중복된 함수들의 이름이 동일해야함
2. 디폴트 매개변수 선언 및 호출 방법 (예제 6-3 소스코드)
#include <iostream>
using namespace std;
//원형 선언
void star(int a=5);
void msg(int id, string text="");
// 함수 구현
void star(int a){
for(int i=0;i<a;i++)
cout << '*';
cout << endl;
}
void msg(int id, string text){
cout << id << ' ' << text << endl;
}
int main(){
// star() 호출
star();
star(10);
// msg() 호출
msg(10);
msg(10,"Hello");
}
3. 디폴트 매개변수의 제약조건
디폴트 매개 변수는 보통 매개 변수 앞에 선언될 수 없음
(디폴트 매개 변수는 끝 쪽에 몰려 선언되어야 함)
void calc(int a, int b=5, int c, int d=0);
void sum(int a=0, int b, int c);
<컴파일 불가>
void calc(int a, int b=5, int c=0, int d=0);
<컴파일 가능>
4. 디폴트 매개변수를 이용하여 함수 간소화 (예제 6-5 소스코드)
#include <iostream>
using namespace std;
void fillLine(int n=25, char c='*'){ // n개의 c 문자를 한 라인에 출력
for(int i=0; i<n; i++)
cout << c;
cout << endl;
}
int main() {
fillLine(); // 25개의 '*'를 한 라인에 출력
fillLine(10, '%'); // 10개의 '%'를 한 라인에 출력
}
/*
void fillLine(){ // 25 개의 '*' 문자를 한 라인에 출력
for(int i=0; i<25; i++)
cout << '*';
cout << endl;
}
void fillLine(int n, char c){ // n개의 c 문자를 한 라인에 출력
for(int i=0; i<n; i++)
cout << c;
cout << endl;
}
*/
5. static 멤버와 non-static 멤버 비교
<static 멤버>
1. 프로그램과 생명을 같이한다
*프로그램 시작 시 멤버 생성
*객체가 생기기 전에 이미 존재
*객체가 사라져도 존재함
*프로그램 종료시 소멸
2.동일한 클래스의 모든 객체들에 의해 공유됨
3. 멤버는 클래스 당 하나 생성되며 멤버는 객체 내부가 아니라 별도의 공간에 생성됨(클레스 멤버라고 부른다.)
<non-static 멤버>
1.객체와 생명을 같이 한다
* 객체 생성시 멤버생성
* 객체 소멸 시 함께 소멸
* 객체 생성 후 객체 사용 가능
2.공유 되지 않는다 (멤버는 객체 별도의 공간 유지함)
3.멤버는 객체마다 별도 생성함(인스턴스 멤버)
댓글
댓글 쓰기