사자자리
[C++] 함수의 활용 본문
일반 함수와 인라인 함수
- 인라인 함수는 호출을 하지 않고, 함수의 코드를 그대로 실행한다.
- 함수 호출 과정이 없으므로 속도가 좀 더 빠르다. 따라서 자주 호출되면서 속도가 중요한 부분에 주로 사용된다.
- 함수의 코드가 복잡해진다면 실질적으로 절약되는 시간은 미비하다.
- 함수의 코드가 복제되므로, 함수를 많이 사용하면 실행 파일의 크기가 커진다.
#include <iostream>
using namespace std;
inline float square(float x) { //인라인 함수의 정의
return x * x;
}
int main() {
int a = 5;
float b = square(a);
cout << "한 변의 길이가 " << a << "인 정사각형의 넓이: " << b;
}
/*
<실행 결과>
한 변의 길이가 5인 정사각형의 넓이: 25
*/
디폴드 매개변수(Default Parameter)
- 함수를 호출할 때 인자를 생략했을 경우 대신 사용되는, 미리 정한 인자 값
#include <iostream>
using namespace std;
int add(int x = 10, int y = 20) { //디폴트 매개변수
return x + y;
}
int main() {
cout << add(); //함수를 호출할 때, 인자를 넣지 않음
return 0;
}
/*
<실행 결과>
30
*/
참조(reference)
- 미리 정의된 변수의 실제 이름 대신 사용할 수 있는 대용적인 이름
- 함수의 매개변수에 사용
- 함수의 매개변수에 구조체를 선언하면, 원본이 아닌 복사본에 대해 작업한다.
- 그러나 참조를 매개변수로 사용하면, 복사본이 아닌 원본에 대해 작업한다.
#include <iostream>
using namespace std;
void swapA(int&, int&);
void swapB(int*, int*);
void swapC(int, int);
int main() {
int a = 111;
int b = 222;
cout << "최초 상태" << endl;
cout << "a = " << a << ", b = " << b << endl;
cout << "참조에 의한 전달" << endl;
swapA(a, b);
cout << "a = " << a << ", b = " << b << endl;
cout << "포인터에 의한 전달" << endl;
swapB(&a, &b);
cout << "a = " << a << ", b = " << b << endl;
cout << "값에 의한 전달" << endl;
swapC(a, b);
cout << "a = " << a << ", b = " << b << endl;
return 0;
}
//참조에 의한 전달
void swapA(int& a, int& b) {
int temp;
temp = a;
a = b;
b = temp;
}
//포인터에 의한 전달
void swapB(int* a, int* b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
//값에 의한 전달
void swapC(int a, int b) {
int temp;
temp = a;
a = b;
b = temp;
}
/*
<실행 결과>
최초 상태
a = 111, b = 222
참조에 의한 전달
a = 222, b = 111
포인터에 의한 전달
a = 111, b = 222
값에 의한 전달
a = 111, b = 222
*/
함수 오버로딩
- 여러 개의 함수를 같은 이름으로 연결한다.
- 서로 다른 데이터형의 매개변수를 대상으로 하지만, 같은 작업을 수행하는 함수들에 사용하는 것이 바람직하다.
#include <iostream>
using namespace std;
int sum(int a, int b) { return a + b; }
float sum(float a, float b) { return a + b; }
int main() {
int a = 11, b = 22;
float c = 3.3, d = 4.4;
cout << "int형: " << sum(a, b) << endl;
cout << "float형: " << sum(c, d) << endl;
}
/*
<실행 결과>
int형: 33
float형: 7.7
*/
- 매개변수의 데이터형은 같고 리턴형의 데이터형만 다를 경우엔 사용할 수 없다.
int sum(int, int);
float sum(int, int);
- 함수를 사용할 때, 두 개 이상의 함수에 대응되는 경우엔 사용할 수 없다.
함수 템플릿
- 데이터형에 상관없이, 일반적으로 사용할 수 있는 함수
- 구체적인 데이터형을 포괄할 수 있는 일반형으로 함수를 정의한다.
#include <iostream>
using namespace std;
template <typename type> //사용할 자료형의 이름을 표시
type sum(type a, type b){
return a + b;
}
int main() {
cout << sum(11, 22) << endl; //11과 22의 자료형은 같다.
cout << sum(3.3, 4.4) << endl; //3.3과 4.4의 자료형은 같다.
//cout << sum(55, 6.6) << endl; //55와 6.6은 자료형이 같지 않으므로 실행이 되지 않는다.
}
#include <iostream>
using namespace std;
template <class c1, class c2>
void printSum(c1 a, c2 b) {
cout << a + b << endl;
}
int main() {
int x = 11;
float y = 2.2;
printSum(x, y);
}
'C++ > C++ 이론' 카테고리의 다른 글
[C++] 추상화와 클래스 (0) | 2022.08.17 |
---|---|
[C++] 분할 컴파일: #ifndef & #endif (0) | 2022.08.17 |
[C++] 함수 (0) | 2022.08.03 |
[C++] 조건문 if, switch / 논리연산자 (0) | 2022.07.27 |
[C++] 반복문 for, while, do while (0) | 2022.07.27 |
Comments