#220830~ 220902 ~
template < class T> T Max(T i, T j)
{
return i > j ? i : j;
};
int main()
{
std::cout << "Max값은" << Max(1,2) <<std::endl;
std::cout << "Max값은" << Max(7.5, 3.6) <<std::endl;
std::cout << "Max값은" << Max('A','B') <<std::endl;
return 0;
}
ex1).
template < class T> T Min(T n1, T n2) // 자료형이 T
{
// 리턴형, 매개변수가 모두 T형
return (n1<n2? n1:n2);
};
int main()
{
int min_i;
min_i=Min(3,6);
//매개변수 자료형이 정수형으로 T는 int형이 됨
std::cout << min_i << "," << " ";
double min_d;
min_d=Min(10.3, 20.6);
//매개변수 자료형이 double형으로 T는 double형이 됨
std::cout << min_d;
return 0;
}
// 3, 10.3
ex2).
// 같은형, 두개 다른 자료형 다 들어가도 다양하게 문제없이 출력 가능
template < class T1, class T2> void fun(T1 x, T2 y)
{ // 두개에 대한 자료형이 T1, T2로 서로 다르다
std::cout << x << " " << y << "" << std::endl;
};
int main()
{
fun("Han", 30); //T1은 문자열(cosnt char *), T2는 정수형(int)
fun(25, 50.5); //T1은 정수형(int), T2는 double형
return 0;
}
int add(int x, int y);
int main(void)
{
int sum;
sum=add(5,10);
//함수를 호출할때 사용하는 매개변수인 (5,10) 실매개변수 - 'argument'
}
int add(int x, int y) // 함수 정의시 사용하는 x,y는 형색매개변수 - 'parameter'
{
//x에 5, y에 10이 전달됨
return (x+y);
}
int sum(int x, int y); //int sum(int, int);
int main()
{
int a=2, b=5, c;
c=sum(a,b);
std::cout << a << " " << b << " " << c << std::endl; // 2, 5, 14
return 0;
}
int sum(int a, int b) // a, b에 2,5가 넘어옴
{
a=a+2; // 이곳의 a와 main함수의 a는 전혀 다른 변수
b=b+5;
std::cout << a << " " << b << " ";
return(a+b);
}
포인터: 메모리의 주소, 번지, address
int x=10, y; // 정수형 변수 x,y 선언
int *px; // 포인터 px선언, 선언문에서 *는 포인터 선언하는 구두점
px=&x; // 정수형 변수. x의 주소를 포인터 px에 대입
y=*px; // 실행문에서 *는 참조 연산자
// * 포인터 변수에 저장된 주소로 가서 실제 데이터값을 가져와라
px에 저장된 주소(&x)로 가서 값 (x의 내용)을 가져오므로 y=10이 됨.
포인터
실매개변수의 주소를 형식매개변수로 전달
함수 호출 할 때
함수 정의 시
형식매개변수가 변하면 실매개변수도 변함
return 값이 여러 개 이거나 배열 전체를 전달하는 경우 사용
void swap(int *a, int *b);
int main(void)
{
int a=2, b=5;
std::cout << a << " " << b << std::endl;
// call by reference 인 주소를 넘겨야 함
swap(&a, &b);
std::cout << a << " " << b << std::endl;
return 0;
}
// 주소를 받아야해서 * 포인터 변수로
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
std::cout << *a << " " << *b << std::endl;
}
2 5
5 2
5 2
// 예제2 (call by reference)
void ss(int, int, int*, int*);
int main()
{
int a=2, b=5;
int sum=0, sub=0;
std::cout << sum << sub << '\n';
// 주소로 넘기는 이유? 밑에서 변경된 값을 다시 가져오고싶다!
ss(a,b,&sum,&sub);
std::cout << sum << sub << '\n'; // 7-3
return 0;
}
void ss(int a, int b, int *psum, int *psub) //main의 sum변수의 주소를 받는 포인터 변수
{
// psum 변수의 주소로 가서 그 값으로 a+b를 저장
*psum=a+b;
*psub=a-b;
}
0 0
7 -3