사자자리

[C++] 함수의 활용 본문

C++/C++ 이론

[C++] 함수의 활용

renne 2022. 8. 5. 12:08

일반 함수와 인라인 함수

https://dojang.io/mod/page/view.php?id=748

 

 - 인라인 함수는 호출을 하지 않고, 함수의 코드를 그대로 실행한다.

 - 함수 호출 과정이 없으므로 속도가 좀 더 빠르다. 따라서 자주 호출되면서 속도가 중요한 부분에 주로 사용된다.

 - 함수의 코드가 복잡해진다면 실질적으로 절약되는 시간은 미비하다.

 - 함수의 코드가 복제되므로, 함수를 많이 사용하면 실행 파일의 크기가 커진다.

#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