1. 함수 중복의 조건


  • 중복된 함수들의 이름이 동일 하여야 한다.
  • 중복된 함수들은 매개 변수 타입이나 매개 변수의 개수가 달라야 한다.
  • 함수 중복에 리턴 타입은 고려되지 않는다.


2. 함수중복의 예(예제 6-2 소스, 실행과정을 설명)


#include <iostream>


using namespace std;


int sum(int a){ // 1번 sum 함수 : a에서 b까지 합하기 

int s = 0;

for(int i = 0; i<=a; i++){

s+=i;

}

return s;

}


int sum(int a, int b){ // 2번 sum 함수 : 0에서 a까지 합하기 

int s = 0;

for(int i = a; i<=b; i++){

s+=i;

}

return s;

}


int main(int argc, char** argv) {

cout << sum(3, 5) << endl; //2번 sum 함수 실행이 되어 3부터 5까지 합해진 값을 출력 

cout << sum(3) << endl; //1번 sum 함수 실행이 되어 0부터 3까지 합해진 값을 출력 

cout << sum(100) << endl; //1번 sum 함수 실행이 되어 0부터 100까지 합해진 값을 출력 

return 0;

}




3. 디폴트 매개변수

   (1) 제약조건 : 디폴트 매개 변수는 모두 끝 쪽에 몰려 선언되어야 함

ex) void calc(int a, int b=5, int c, int d=0); X

     void calc(int a=0, int b); X

     void calc(int a, int b, int c=0, int d=0); O

   (2) 예제(프로그램6-5 소스+주석)


#include <iostream>


using namespace std;

/* 1번함수 

void fillLine(){ //25개의 '*'문자를 한 라인에 출력 

for(int i=0; i<25; i++){

cout << '*';

}

cout << endl;

}

2번함수 

void fillLine(int n, char c){ //n개의 c 문자를 한 라인에 출력 

for(int i=0; i<n; i++){

cout << c;

}

cout << endl;

}

*/

void fillLine(int n=25, char c='*'){ //1번과 2번 함수를 디폴트 매개 변수를 이용하여 하나의 함수로 만듬. n개의 c문자를 한 라인에 출력 

for(int i=0; i<n; i++){

cout << c;

}

cout << endl;

}


int main(int argc, char** argv) {


fillLine(); // 디폴트 매개변수에 의해 25개의 *를 한 라인에 출력한다. 

fillLine(10, '%'); // 매개변수에 입력값이 있으므로 10개의 %를 한 라인에 출력한다. 


return 0;

}



4. 함수 중복의 모호성


함수 중복을 허용하는 조건을 갖춘 경우에도 중복된 함수에 대한 호출이 모호해지는 경우가 발생한다. 이러한 경우 컴파일러는 오류를 발생시키므로 모호하지 않게 작성해야 한다.


아래는 함수 중복으로 인한 모호성이 발생하여 컴파일러가 오류를 내는 경우이다.

  • 형 변환으로 인한 모호성
    ex)float square(float a);
       double square(double a);
  • 참조 매개 변수로 인한 모호성
    ex)int add(int a, int b);
        int add(int a, int &b);
  • 디폴트 매개 변수로 인한 모호성
    ex)void msg(int id)
        void msg(int id, string s="")


4. static멤버의 특징


 static 맴버는 프로그램이 시작할 때 생성되고 프로그램이 종료할 때 소멸된다. 변수나 함수가 선언된 범위 내에서 사용하고 전역(global) 혹은 지역(local)로 구분한다.


 쉽게 설명해서 눈과 공기 모두 사람이 소유하는 맴버 라는 공통점을 가지고 있지만, 눈은 각 사람마다 있고 공기는 모든 사람이 공유한다는 차이점이 있다. 공기와 같은 맴버가 static 맴버이고 눈과 같은 맴버가 non-static 맴버이다. non-static 맴버는 객체가 생성 될 시, static은 객체가 생기기전에 이미 생성되어 있고 객체가 사라져도 소멸되지 않는다.


 그렇기 때문에 non-static 맴버는 인스턴스(instance) 맴버라고 부르며 static 맴버는 클래스(class)맴버라고 부른다.


5. static활용 예제(예제6-10소스 + 주석)

'basic > C++' 카테고리의 다른 글

8. 상속  (0) 2018.05.17
7. 프렌드와 연산자 중복 (비어있습니다)  (0) 2018.05.17
5. 함수와 참조, 복사생성자  (0) 2018.05.03
4. 객체 포인터와 객체배열, 객체의 동적생성  (0) 2018.04.10
3. 클래스와 객체  (0) 2018.03.22

+ Recent posts