[C++]코딩연습장

C++ [참조 변수] [함수 템플릿]

KAU 2021. 2. 21. 17:35


참조 변수

#include <iostream>

using namespace std;

int main() {
	//참조(reference)란?
	//미리 정의된 변수의 실제 이름 대신 사용
	//함수의 매개변수에 사용
	//함수의 매개변수에 구조체를 선언하면 c++은 구조체의 원본이 아니라 복사본에 대해 작업을 한다.
	//참조를 매개변수로 사용하면 원본의 데이터를 갖고 작업
	//구조체의 볼륨이 크면 포인터 대신 참조를 사용하는것이 유리

	int a;
	int& b = a;
	//주소 연산자인 동시에 참조 연산자이다.
	//여기서는 데이터형의 식별자로 사용
	//참조변수의 방식으로 전달하는것을 참조로 전달한다고 한다.
return 0;

}

참조를 매개변수로 사용하면 원본의 데이터를 갖고 작업할 수 있다.

 

#include <iostream>

using namespace std;

void swapA(int&, int&);
void swapB(int*, int*);
void swapC(int, int);

int main() {
	int wallet1 = 100;
	int wallet2 = 200;

	cout << "최초 상태" << endl;
	cout << "wallet1 = " << wallet1 << ", wallet2 = " << wallet2 << endl;

	cout << "\n참조를 이용한 값의 교환\n";
	
	swapA(wallet1, wallet2);
	cout << "참조 교환 이후 상태\n";
	cout << "wallet1 = " << wallet1 << ", wallet2 = " << wallet2 << endl;

	cout << "\n포인터를 이용한 값의 교환\n";
	swapB(&wallet1, &wallet2);
	cout << "포인터를 이용한 교환 이후 상태\n";
	cout << "wallet1 = " << wallet1 << ", wallet2 = " << wallet2 << endl;

	cout << "\n값을 이용한 값의 교환\n";
	swapC(wallet1, wallet2);
	cout << "값을 이용한 교환 이후 상태\n";
	cout << "wallet1 = " << wallet1 << ", wallet2 = " << wallet2 << 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;
}

값을 이용한 값의 교환은 불가능하다.


함수 템플릿

#include <iostream>

using namespace std;

//class 혹은 typeName
template <class Any>
Any sum(Any, Any);

int main() {
	//함수 템플릿
	//구체적인 데이터형을 포괄할 수 있는 일반형으로 함수를 정의
	//어떤 데이터형을 템플릿형의 매개변수로 전달하면 컴파일러가 그 데이터형에 맞는 함수를 생성한다.
	//데이터형에 상관없이 일반적으로 사용할 수 있는 함수를 만드는것==>일반화

	int a = 3;
	int b = 4;
	cout << sum(a, b) << endl;

	float c = 3.14;
	float d = 1.592;
	cout << sum(c, d) << endl;
	cout << sum(a, c) << endl;


	return 0;
}

template <class Any>
Any sum(Any a,Any b){
	return a+b;
}

#include <iostream>

using namespace std;

//class 혹은 typeName
template <class Any>
Any sum(Any, Any);
template <class Any>
Any sum(int, Any);

int main() {
	//함수 템플릿
	//구체적인 데이터형을 포괄할 수 있는 일반형으로 함수를 정의
	//어떤 데이터형을 템플릿형의 매개변수로 전달하면 컴파일러가 그 데이터형에 맞는 함수를 생성한다.
	//데이터형에 상관없이 일반적으로 사용할 수 있는 함수를 만드는것==>일반화

	int a = 3;
	int b = 4;
	cout << sum(a, b) << endl;

	float c = 3.14;
	float d = 1.592;
	cout << sum(c, d) << endl;
	cout << sum(a, c) << endl;


	return 0;
}

template <class Any>
Any sum(Any a,Any b){
	return a+b;
}

template <class Any>
Any sum(int a, Any b) {
	return a + b;
}

#include <iostream>

using namespace std;

//class 혹은 typeName
template <class Any>
Any sum(Any, Any);
template <class Any>
Any sum(int, Any);

int main() {
	//함수 템플릿
	//구체적인 데이터형을 포괄할 수 있는 일반형으로 함수를 정의
	//어떤 데이터형을 템플릿형의 매개변수로 전달하면 컴파일러가 그 데이터형에 맞는 함수를 생성한다.
	//데이터형에 상관없이 일반적으로 사용할 수 있는 함수를 만드는것==>일반화

	int a = 3;
	int b = 4;
	//cout << sum(a, b) << endl;

	float c = 3.14;
	float d = 1.592;
	cout << sum(c, d) << endl;
	cout << sum(a, c) << endl;


	return 0;
}

template <class Any>
Any sum(Any a,Any b){
	return a+b;
}

template <class Any>
Any sum(int a, Any b) {
	return a + b;
}

'[C++]코딩연습장' 카테고리의 다른 글

C++ [클래스]  (0) 2021.02.22
C++ [분할컴파일]  (0) 2021.02.22
C++ [Function]  (0) 2021.02.21
C++ [포인터와 메모리 해제] [포인터 연산] [동적 구조체]  (0) 2021.02.21
C++ [구조체]  (0) 2021.02.21