티스토리 뷰

함수중복

 

•함수중복
    –동일한이름의 함수가 공존

•다형성

•C 언어에서는 불가능
    –함수중복이 가능한 범위

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

•함수 중복 조건
    –중복된함수들의 이름동일
    –중복된함수들의 매개변수타입이다르거나 개수달라야
    –리턴타입은 함수중복과 무관

 

*사용 형식

void function(int a, int b, int c = 10, int d= 20){ // 함수 구현할 때 매개변수에 바로 초기화 해주면 호출시 이 값으로 매개변수값이 전달된다.

.....

}

 

int main(){

function(1,2); // c와 d는 10과 20으로 전달된다. => a = 1, b =2 , c = 10, d = 20

 

return 0;

}

 

 

<예제 소스 코드>

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
32
#include<iostream>
using namespace std;
 
void msg(int id, string text = "Hello") {
    cout << "id : " << id << " / text = " << text << endl;
}
 
//디폴트 매개변수는 끝쪽으로 모아서 선언한다. 
void sum(int a, int b, int c = 10int d = 20){
    int s = 0;
    s = a+b+c+d;
    cout << "매개변수의 합은 "<< s << endl
}
 
void square(int width = 1int height = 1){
    cout << "width = " << width << " / height = " << height << endl
    
}
 
int main() {
    square();//실행결과 width =1 ,height = 1 
    square(5);//실행결과 width =5 ,height = 1 
    square(3,8); //실행결과 width =3 ,height = 8
     
    //sum();//보통매개변수는 반드시 값을 전달해야한다.
    // sum(100, 50);
      
    //msg();//컴파일 오류 : msg() id 변수는 디폴트 값을 가지지 않으므로     
    //msg(10);//실행 결과는 디폴트값을 text변수에 "Hello" 출력
    //msg(10, "Good Morning");//실행 결과는 디폴트값을 text변수에 "Hello" 출력
    return 0;
}
cs

 

 

 

<예제 소스 코드2>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
 
void fillLine(int n = 25char c = '*') {
    for (int i = 0; i < n; i++)
        cout << c;
    cout << endl;
}
 
int main() {
    fillLine();
    fillLine(10'%');
 
    return 0;
}
cs

 

static의주요활용
- 전역변수나 전역함수를 클래스에 캡슐화

•전역변수나전역함수를가능한사용하지않도록


•전역변수나전역함수를static으로선언하여클래스멤버로선언
- 객체사이에 공유변수를 만들고자 할 때

•static 멤버를 선언하여 모든 객체들이 공유

 

댓글