함수 중복과 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.멤버는 객체마다 별도 생성함(인스턴스 멤버)


댓글

이 블로그의 인기 게시물

HTML 특정 위치로 링크 걸기

객체포인터와 객체배열, 객체의 동적생성

듀얼쇼크3/Sixaxis PC에서 사용하기 - Windows 7 64bit 지원