티스토리 뷰

IT/C++

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

DongChul 2014. 11. 12. 14:41

* 함수 중복

-  동일한 이름의 함수가 공존

     *  다형성

     *  C 언어에서는 불가능


- function overloading

- 함수 중복이 가능한 범위

     *  보통 함수들 사이

     *  클래스의 멤버 함수들 사이

     *  상속 관계에 있는 기본 클래스와 파생 클래스의 멤버 함수들 사이


* 함수 중복 조건

- 중복된 함수들의 이름 동일

- 중복된 함수들의 매개 변수 타입이 다르거나 개수가 달라야 함

- 리턴 타입은 함수 중복과 무관


생성자함수도 동일하게 중복이 가능하다

하지만 소멸자는 중복이 불가능하다


디폴트 매개변수 

- 매개변수에 값이 넘어오지 않는 경우, 디폴트 값을 받도록 선언된 매개변수

매개 변수 = 디폴트값 평태로 선언


예시

void star(int a = 5); // a의 디폴트 값은 5


디폴트 매개 변수를 가진 함수 호출

star(); // 매개변수 a에 디폴트 값 5가 전달

star(10); // 매개 변수 a에 10을 넘겨줌


디폴트 매개변수 사용시 항상 일반 매개변수가 앞에 오고 디폴트 변수가 뒤에 와야한다.

void msg(int id,string text = "Hello"); // text의 디폴트 값은  "Hello"


매개변수에 값을 넘기지 않으면 디폴트 매개변수가 들어가지만 매개변수에 값을 넣으면 사용자가

입력한 값이 변수에 들어간다.


*  함수 간소화

디폴트 매개변수를 사용할 시 함수의 두개의 함수를 하나의 함수로 만들수 있다.

변수를 받아서 값을 출력하는 함수와 변수를 받지 않고 값을 출력하는 함수를 디폴트 변수를 사용하여 

값을 입력받는 경우와 값을 입력받지 않는 경우로 나누어 한번에 함수를 만들수 있다는 장점이 있다.


예를들면


void fillLine(){

     for(int i =0; i< 25;i++) cout << '*';

     cout <<endl;

}


void fillLine(int n , char c){

     for(int i =0; i< n;i++) cout << c;

     cout <<endl;

}

이런 경우의 함수를

void fillLine(int n = 25 , char c = '*'){

     for(int i =0; i< n;i++) cout << c;

     cout <<endl;

}

이런식으로 한번에 간소화 하여 나타낼 수 있다.


형 변환으로 생긴 함수 중복의 모호성



위와 같이 형변환으로 생긴 함수가 3이란 값을 double 인지 float 인지 컴파일러가 알수 없어서 에러가 생겼다.

위 오류를 해결하려면 square((double) 3) 이던지 square((float) 3) 으로 캐스팅 하여 나타내 주어야 한다.


참조 매개 변수로 인한 함수 중복의 모호성



위와같이 참조 매개 변수를 사용하여 함수를 중복사용하였는데 call by value 인지 call by reference  인지 명확하게 컴파일러가 알 수 없기 때문에 에러가 난다. 근본적으로 두개의 변수는 중복시킬수 없다.



디폴트 매개 변수로 인한 함수 중복의 모호성




위의 예시를 보면 msg함수에서 string을 사용하고 사용하지 않고에 구분을 두어 디폴트 매개변수를 

사용하여 함수를 중복했다. 하지만 main에서 함수를 호출할 시 msg(6) 을 호출 하였는데 첫번째를 사용할지 두번째를 사용할지 컴파일러가 알수 없기 때문에 이런경우는 함수 간소화를 사용하여

void msg(int id, string s = ""){

if (s ==  "")

cout << id <<endl;

else 

cout << id << ", " << s << endl;

}

이런식으로 표현하는것이 컴파일러에게 혼동을 주지 않는 표현이다.

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

[C++] 함수의 인수 전달,복사 생성자  (0) 2014.11.07
[C++] String Class  (0) 2014.11.06
[C++] 배열과 객체의 동적 할당  (2) 2014.10.29
[C++] 계산기 예제  (0) 2014.10.08
[C++] 생성자 소멸자 응용 프로그램  (0) 2014.10.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함