실매개변수 : 함수호출문장에서 함수의 형식 매개변수에 전달할 인수
형식매개변수 : 인수를 전달받기위해 함수에 선언된 매개변수, 함수헤더에 매개변수의 자료형과 이름을 선언함
값 호출( call-by value)
실 매개변수의 값을 형식매개변수에 복사하는 방식
값 호출 방식의 장단점
장점 : 실 매개변수와 형식 매개변수는 별개의 데이터이므로 불필요한 부작용이 발생하지않음 (실 매개변수의 값이 바뀌지않음)
단점 : 구조체와 같이 많은 양의 데이터로 구성된 인수를 전달할 경우 데이터의 복사량이 많아짐
참조호출(call-by-reference)
-C언어에서는 안됨 C언어에서는 포인터를 이용했었음
- 실 매개변수의 참조를 형식매개변수에 전달하는 방식
참조호출의 용도
- 함수에서 처리한 결과를 매개변수를 통해 받아오려는 경우
--함수에서 형식 매개변수의 값을 변경하는 것은 실 매개변수의 값을 변경하는 것과 같음
-많은 양의 데이터로 구성되는 구조체나 객체와 같은 인수를 함수에 효율적으로 전달하는 경우
--형식 매개변수에 복사되는 데이터의 양은 실 매개변수의 크기와 관계 없이 일정함
-많은 양의 데이터로 구성되는 구조체나 객체를 인수로 전달하는 경우 값 호출을 사용하는 것에 비해 참조호출을 사용하는 것이 효율적임
-함수 호출의 효율성을 위해 참조호출을 하지만 실매개변수의 값이 변경되는 것을 원하지 않는 경우에는 형식 매개변수에 const를 한정어를 지정하여 실 매개변수를 보호.
디폴트 인수는 인수중 맨 끝에만 위치할 수 있다.
void f (int x , int y=10 , int z=20); //OK
f(5,100);// OK z=20으로 입력됨
f(5, , 300); // 오류
f(5,10,300); // OK 중간에 있는값만 디폴트값을 써야할떄는 디폴트값을 입력을해줘야만한다.
void g(int x , int y=10 , int z); //오류
함수의 다중정의
(c에서는 안됨 c++에서 제공)
다중정의?
- 동일한 이름에 대하여 여러가지 의미를 부여하는 것
함수의 다중정의
-동일한 이름을 갖는 함수를 여러 개 정의하는 것
동일한 개념의 처리를 여러가지 데이터나 객체에 대해 각각의 대상에 맞는 처리를 해야할 경우 사용함
다중 정의된 함수의 구분 : 인수의 개수 및 자료형
함수의 반환 자료형으로는 함수를 구분할 수 없음
ex) 아래의 경우 에러
ex)g(10)의 경우 모호한 정의. 에러남.
ex) h(10.0)에러남. 형변환 대상이 모호함 10.0은 double형이라서
inline함수란
- inline int square(int x): square 함수는 inline 함수로 선언되었습니다. 컴파일러가 square(num) 호출을 num * num로 대체하도록 요청합니다.
- 함수 호출 오버헤드 제거: square 함수가 호출될 때, 실제 함수 호출을 하지 않고, 해당 코드를 직접 삽입하여 오버헤드를 줄입니다.
inline 함수의 동작 방식
- 컴파일러 요청: inline 키워드는 컴파일러에게 함수 호출을 대체 코드로 삽입하도록 요청하지만, 컴파일러가 반드시 이를 적용하는 것은 아닙니다.
- 적합한 함수: inline 함수는 짧고 간단한 함수에 적합합니다. 복잡한 함수나 반복문, 재귀 함수는 inline 처리가 되지 않을 수 있습니다.
- 함수 호출 절차를 따르지않고 함수 호출위치에 함수의 처리 문장이 삽입되게 번역되도록 선언된 함수
- 함수를 사용함으로써 얻을 수 있는 모듈화의 장점을 살리면서 , 함수 호출에 따른 부수적인 처리시간이 생략됨
- 함수 호출 루틴으로부터 함수로 넘어가는 부분의 코드 최적화가 가능해짐
-매우 빈번히 호출되며 빠른 실행이 요구되는 함수를 inline함수로 선언하면 성능을 높이는데 도움이 됨
inline함수로 선언하더라도 반드시 inline으로 번역되는 것은 아님
inline선언을 무시하고 일반 함수로 번역하는 경우
- 함수가 너무 큰 경우
-순환호출을 하는경우
-프로그램 내에서 그 함수에 대한 포인터를 사용하는 경우
'수업 > C++' 카테고리의 다른 글
8,9연산자 다중정의 (0) | 2024.11.25 |
---|---|
7.클래스와 객체 -임시객체,묵시적형변환,위임생성자 ,초기화리스트생성자 (0) | 2024.11.25 |
5,6 클래스와 객체 (const, 생성자,소멸자,rvalue참조,static) (4) | 2024.11.13 |
3강 C++기초 // C++의 구조체, 동적 메모리할당 (0) | 2024.10.01 |
1강2강 c++소개 (1) | 2024.09.30 |