728x90
반응형
1. 템플릿: 포괄적 함수(generic function)
-템플릿은 인자(매개변수)를 통한 다형성을 제공한다.
-함수 중첩은 기능이 같은 함수들을 같은 이름으로 사용할 수 있도록 한다. 함수의 매개변수의 형과 수로 구분이 되고, 코드 자체도 다르게 구성될 수 있다. 그러나, 코드는 전혀 바뀌지 않고 다른 함수를 필요로 한다면 템플릿을 사용한다.
-템플릿은 값 뿐만 아니라 형을 인자로 받는 함수로서 인자로 받은 형에 대하여 함수를 생성시키는 포괄적 함수(generic function)이다.
1.1 템플릿 구현 형식
template <class 자료형 이름> 리턴형 함수 이름 (매개변수 리스트) { //함수 코드 } |
template <class T> void SS(T x, T y) // T는 결정하지 않은 자료형 { //함수 코드 } |
1.2 템플릿의 구현
#include <iostream> using std::cout; using std::endl; template <class T1, class T2> void fun(T1 x, T2 y) { cout << x << " " << y <<endl; } int main() { fun("P_Piano", 22); // T1은 문자열, T2는 정수형 fun(25, 21.9); //T1은 정수형(int), T2는 double형 return 0; } |
2. 실매개변수, 형식매개변수
-함수들 간에 서로 데이터를 교환할 때 사용하는 것을 함수의 매개변수라고 한다.
-실매개변수(actual parameter, argument)
-함수를 호출할 때 사용하는 매개변수
-형식매개변수(formal parameter, parameter)
-함수 정의에서 사용하는 매개변수
3. 매개변수를 전달하는 방법
-C언어에서는 기본적으로 값에 의한 호출(call by value)
-실매개변수의 값을 형시매개변수로 전달 (이 방법은 실매개변수를 형식매개변수로 전달할 뿐 함수 내부에서 형식매개변수가 변경되더라도 실매개변수는 변경되지 않는다.)
-형식매개변수가 변하면 실매개변수도 변하게 하려면 포인터를 이용하여 call by reference로 구현해야 한다.
4. 포인터와 주소
- 메모리에는 위치를 구분하기 위해 순서대로 번호가 붙어있는데 이것을 메모리의 주소, 번지, address라고 한다.
- int sum = 0;
- 변수를 초기화 하면서 선언하면, int형이므로 4바이트 메모리 공간이 확보되고 초기값으로 0이 할당된다.
- sum 변수가 실제로 할당된 메모리의 주소를 알고 싶다면 &연산자를 사용하여 &sum이라고 하면 변수가 기억되어 있는 메모리 번지를 알 수 있다.
- 메모리의 주소를 저장하려면 일반 변수가 아닌 포인터를 사용한다.
- 포인터라고만 해도 되지만 주소를 저장하는 변수이므로 포인터 변수라고도 한다.
5. 포인터 선언
- 포인터도 변수이므로 사용하기 전에 선언을 해야 한다. 포인터의 선언 방법은 자료형과 변수명 사이에 구두점 *를 더 쓰면 된다.
- (선언문에서 쓰는 *는 곱하기 연산자와 전혀 관계없는 구두점이다)
ex)
-int x; //일반 변수 x의 선언
-int *x; //포인터 (변수) x의 선언
-int* px; //포인터 px의 선언
-int *px, y; //px만 포인터, y는 일반 변수
-int *px, *py; //px, py 둘 다 포인터
( *의 위치는 자료형과 변수명 사이 아무데나 있어도 된다.)
-int* px;
-int * px;
-int *px;
3가지 방법 다 가능
6. 참조 연산자 *
- 포인터에 주소를 대입하는 방법이다.
- int x = 10; //일반 변수 x의 선언과 초기화
- px = &x; //포인터 px에 변수 x의 주소를 대입
- 포인터는 일반적으로 일반 변수명 앞에 주소 연산자(&)를 사용해 해당 변수의 주소를 저장한다.
- 포인터 px에는 변수 x의 주소가 들어있다.
- 포인터 앞에 *는 참조 연산자이다.
- 곱하기 연산자 *와 모양은 같지만 우선 순위가 높다.
7. 범위 지정 연산자 '::'
- 멤버함수가 어느 클래스에 포함되어 있는지를 나타낼 때 사용하는 연산자이다.
- 8행에서 범위 지정 연산자 :: 를 사용했다.
- ::을 사용했기 때문에 8행에 존재하는 a는 블록({ }) 안에 있는 지역변수 a를 뜻하는 것이 아니라 블록 밖에 있는 전역 변수 a를 뜻하게 된다.
- 즉, 8행은 a가 3이기 때문에 3+3이 되어서 6이라는 값이 나오게 된다.
728x90
반응형
'C++' 카테고리의 다른 글
[C++] 함수 중첩과 디폴트 인자 (0) | 2023.01.02 |
---|---|
[C++] 객체와 멤버, 변수와 배열 (0) | 2022.12.28 |
[C++] const, const 예제 (0) | 2022.12.26 |
[C++] 함수, 기억클래스, 구조체 (0) | 2022.09.22 |
[C++] 매개변수, 인자, 리턴값, 함수, 여러 예제 (0) | 2022.09.18 |