함수는 입력을 받고 특정 계산을 수행하는 일련의 명령문입니다. 그리고 출력을 생성합니다. 아이디어는 일부를 공통적으로 또는 반복적으로 배치하는 것입니다. 만들기 위해 함께 작업을 수행했습니다. 기능 따라서 다른 입력에 대해 동일한 코드를 반복해서 작성하는 대신 이 함수를 호출할 수 있습니다.
간단히 말해서, 함수는 호출될 때만 실행되는 코드 블록입니다.
통사론:

함수 구문
예:
C++
// C++ Program to demonstrate working of a function> #include> using> namespace> std;> // Following function that takes two parameters 'x' and 'y'> // as input and returns max of two input numbers> int> max(> int> x,> int> y)> {> > if> (x>y)> > return> x;> > else> > return> y;> }> // main function that doesn't receive any parameter and> // returns integer> int> main()> {> > int> a = 10, b = 20;> > // Calling above function to find max of 'a' and 'b'> > int> m = max(a, b);> > cout <<> 'm is '> << m;> > return> 0;> }> |
>
>산출
m is 20>
시간 복잡도: 오(1)
공간 복잡도: 오(1)
왜 함수가 필요한가요?
- 기능은 우리를 도와줍니다. 코드 중복 감소 . 기능이 소프트웨어의 여러 위치에서 수행되는 경우 동일한 코드를 계속해서 작성하는 대신 함수를 생성하여 모든 위치에서 호출합니다. 이는 향후에 기능을 변경할 경우 한 곳에서만 변경해야 하므로 유지 관리에도 도움이 됩니다.
- 함수가 코드를 만든다 모듈식 . 많은 코드 줄이 포함된 큰 파일을 생각해 보세요. 코드를 함수별로 나누면 코드를 읽고 사용하는 것이 정말 간단해집니다.
- 기능 제공 추출 . 예를 들어, 내부 작업에 대해 걱정하지 않고 라이브러리 기능을 사용할 수 있습니다.
함수 선언
함수 선언은 매개변수의 수, 매개변수의 데이터 유형, 함수의 반환 유형을 컴파일러에 알려줍니다. 함수 선언에 매개변수 이름을 쓰는 것은 선택 사항이지만 정의에 넣어야 합니다. 아래는 함수 선언의 예입니다. (아래 선언에는 매개변수 이름이 없습니다)

함수 선언
예:
C++
// C++ Program to show function that takes> // two integers as parameters and returns> // an integer> int> max(> int> ,> int> );> // A function that takes an int> // pointer and an int variable> // as parameters and returns> // a pointer of type int> int> * swap(> int> *,> int> );> // A function that takes> // a char as parameter and> // returns a reference variable> char> * call(> char> b);> // A function that takes a> // char and an int as parameters> // and returns an integer> int> fun(> char> ,> int> );> |
>
>
기능 유형

C++의 함수 유형
사용자 정의 함수
사용자 정의 함수는 대규모 프로그램의 복잡성을 줄이기 위해 특별히 맞춤화된 사용자/고객 정의 코드 블록입니다. 그들은 또한 일반적으로 다음과 같이 알려져 있습니다. 맞춤형 기능 이는 사용자가 문제에 직면한 조건을 만족시키면서 전체 프로그램의 복잡성을 줄이기 위해 만들어졌습니다.
라이브러리 기능
라이브러리 함수라고도 합니다. 내장 함수 . 이러한 함수는 이미 정의된 컴파일러 패키지의 일부이며 특별하고 다른 의미를 가진 특수 함수로 구성됩니다. 내장 함수는 정의하지 않고 직접 사용할 수 있다는 장점이 있지만, 사용자 정의 함수는 사용하기 전에 함수를 선언하고 정의해야 합니다.
예를 들어: sqrt(), setw(), strcat() 등
앗 자바
함수에 매개변수 전달
함수에 전달된 매개변수는 다음과 같습니다. 실제 매개변수 . 예를 들어 아래 프로그램에서는 5와 10이 실제 매개변수입니다.
함수에 의해 수신된 매개변수가 호출됩니다. 형식적 매개변수 . 예를 들어, 위 프로그램에서 x와 y는 형식 매개변수입니다.

형식 매개변수와 실제 매개변수
매개변수를 전달하는 가장 일반적인 두 가지 방법은 다음과 같습니다.
- 값으로 전달: 이 매개변수 전달 방식에서는 실제 매개변수의 값이 함수의 형식 매개변수에 복사됩니다. 실제 매개변수와 형식 매개변수는 서로 다른 메모리 위치에 저장되므로 함수의 변경 사항이 호출자의 실제 매개변수에 반영되지 않습니다.
- 참조로 전달: 실제 매개변수와 형식 매개변수는 모두 동일한 위치를 참조하므로 함수 내부에서 변경된 내용은 호출자의 실제 매개변수에 반영됩니다.
기능 정의
값으로 전달 fun() 함수를 사용하여 x 값이 수정되지 않는 경우에 사용됩니다.
C++
// C++ Program to demonstrate function definition> #include> using> namespace> std;> void> fun(> int> x)> {> > // definition of> > // function> > x = 30;> }> int> main()> {> > int> x = 20;> > fun(x);> > cout <<> 'x = '> << x;> > return> 0;> }> |
>
>산출
x = 20>
시간 복잡도: 오(1)
공간 복잡도: 오(1)
포인터를 사용하는 함수
fun() 함수는 정수(또는 정수의 주소)에 대한 포인터 ptr을 기대합니다. 주소 ptr의 값을 수정합니다. 역참조 연산자 * 주소의 값에 액세스하는 데 사용됩니다. '*ptr = 30' 문에서는 주소 ptr의 값이 30으로 변경됩니다. 주소 연산자 & 모든 데이터 유형의 변수 주소를 얻는 데 사용됩니다. 함수 호출문 'fun(&x)'에서는 x의 주소를 해당 주소를 사용하여 수정할 수 있도록 x의 주소가 전달됩니다.
C++
// C++ Program to demonstrate working of> // function using pointers> #include> using> namespace> std;> void> fun(> int> * ptr) { *ptr = 30; }> int> main()> {> > int> x = 20;> > fun(&x);> > cout <<> 'x = '> << x;> > return> 0;> }> |
>
>산출
x = 30>
시간 복잡도: 오(1)
공간 복잡도: 오(1)
C++에서 값에 의한 호출과 참조에 의한 호출의 차이점
가치에 의한 호출 | 참고로 전화하세요 |
---|---|
값의 복사본이 함수에 전달됩니다. | 값의 주소가 함수에 전달됩니다. |
함수 내부에서 변경된 사항은 다른 기능에 반영 | 함수 내부의 변경 사항이 반영됩니다. 함수 밖에서도 |
실제적이고 공식적인 주장은 다음과 같이 작성됩니다. 다른 메모리 위치 | 실제적이고 공식적인 주장은 다음과 같이 작성됩니다. 동일한 메모리 위치 |
C++의 함수에 대해 기억해야 할 점
1. 대부분의 C++ 프로그램에는 사용자가 프로그램을 실행할 때 운영 체제에서 호출하는 main()이라는 함수가 있습니다.
2. 모든 함수에는 반환 유형이 있습니다. 함수가 값을 반환하지 않으면 void가 반환 유형으로 사용됩니다. 더욱이, 함수의 반환 유형이 void인 경우에도 상수, 변수 등을 지정하지 않고 'return;' 문만 언급하여 함수 정의 본문에서 return 문을 사용할 수 있습니다. 아래와 같이 기능 종료를 상징합니다.
C++
void> function name(> int> a)> {> > .......> // Function Body> > return> ;> // Function execution would get terminated> }> |
>
김프 직사각형 그리기
>
삼. 매개변수 없이만 호출할 수 있는 함수를 선언하려면 다음을 사용해야 합니다. 공허한 재미(공허) . 참고로, C++에서 빈 목록은 매개 변수 없이만 함수를 호출할 수 있음을 의미합니다. C++에서는 void fun()과 void fun(void)이 모두 동일합니다.
주요 기능
주요 기능은 특수 기능입니다. 모든 C++ 프로그램에는 main이라는 함수가 포함되어 있어야 합니다. 프로그램의 진입점 역할을 합니다. 컴퓨터는 기본 기능의 시작 부분부터 코드 실행을 시작합니다.
주요 기능 유형
1. 매개변수가 없는 경우:
CPP
// Without Parameters> int> main() { ...> return> 0; }> |
>
>
2. 매개변수 사용:
CPP
// With Parameters> int> main(> int> argc,> char> *> const> argv[]) { ...> return> 0; }> |
>
>
주 기능에 매개변수 옵션을 두는 이유는 명령줄에서 입력을 허용하기 위해서입니다. 매개변수와 함께 main 함수를 사용하면 프로그램 이름 뒤의 모든 문자 그룹(공백으로 구분)을 이름이 지정된 배열의 요소로 저장합니다. argv .
메인 함수의 반환 유형은 다음과 같습니다. 정수 , 프로그래머는 항상 코드에 return 문을 가지고 있어야 합니다. 반환된 숫자는 호출 프로그램에 프로그램 실행 결과를 알리는 데 사용됩니다. 문제가 없다는 신호를 0으로 반환합니다.
C++ 재귀
동일한 함수 내에서 함수가 호출되는 경우를 C++에서는 재귀라고 합니다. 동일한 함수를 호출하는 함수를 재귀 함수라고 합니다.
자기 자신을 호출하고 함수 호출 후 어떤 작업도 수행하지 않는 함수를 꼬리 재귀라고 합니다. 꼬리 재귀에서는 일반적으로 return 문을 사용하여 동일한 함수를 호출합니다.
통사론:
C++
json 파일을 여는 방법
recursionfunction()> {> > recursionfunction();> // calling self function> }> |
>
>
자세한 내용은 다음을 참조하세요. 이 기사 .
C++ 배열을 함수에 전달하기
C++에서는 배열 논리를 재사용하기 위해 함수를 만들 수 있습니다. C++에서 함수에 배열을 전달하려면 배열 이름만 제공하면 됩니다.
function_name(array_name[]); //passing array to function>
예: 주어진 배열의 최소 숫자를 인쇄합니다.
C++
#include> using> namespace> std;> void> printMin(> int> arr[5]);> int> main()> {> > int> ar[5] = { 30, 10, 20, 40, 50 };> > printMin(ar);> // passing array to function> }> void> printMin(> int> arr[5])> {> > int> min = arr[0];> > for> (> int> i = 0; i <5; i++) {> > if> (min>도착[i]) {> > min = arr[i];> > }> > }> > cout <<> 'Minimum element is: '> << min <<> '
'> ;> }> // Code submitted by Susobhan Akhuli> |
>
>산출
Minimum element is: 10>
시간 복잡도: O(n) 여기서 n은 배열의 크기입니다.
공간 복잡도: O(n) 여기서 n은 배열의 크기입니다.
C++ 오버로딩(함수)
이름은 같지만 매개변수의 개수나 유형이 다른 멤버를 두 개 이상 만드는 경우를 C++ 오버로딩이라고 합니다. C++에서는 다음을 오버로드할 수 있습니다.
- 행동 양식,
- 생성자와
- 인덱싱된 속성
C++의 오버로딩 유형은 다음과 같습니다.
- 함수 오버로딩
- 연산자 오버로딩
C++ 함수 오버로딩
함수 오버로딩은 이름은 같지만 매개변수가 다른 두 개 이상의 함수를 갖는 프로세스로 정의됩니다. 함수 오버로딩에서는 다른 유형이나 인수 수를 사용하여 함수를 재정의합니다. 컴파일러는 이러한 차이점을 통해서만 함수를 구별할 수 있습니다.
함수 오버로딩의 장점은 동일한 작업에 대해 다른 이름을 사용할 필요가 없기 때문에 프로그램의 가독성이 향상된다는 것입니다.
예: add() 메소드의 인수 수 변경
C++
// program of function overloading when number of arguments> // vary> #include> using> namespace> std;> class> Cal {> public> :> > static> int> add(> int> a,> int> b) {> return> a + b; }> > static> int> add(> int> a,> int> b,> int> c)> > {> > return> a + b + c;> > }> };> int> main(> void> )> {> > Cal C;> // class object declaration.> > cout << C.add(10, 20) << endl;> > cout << C.add(12, 20, 23);> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>산출
30 55>
시간 복잡도: 오(1)
공간 복잡도: 오(1)
예: 인수 유형이 다양한 경우.
C++
// Program of function overloading with different types of> // arguments.> #include> using> namespace> std;> int> mul(> int> ,> int> );> float> mul(> float> ,> int> );> int> mul(> int> a,> int> b) {> return> a * b; }> float> mul(> double> x,> int> y) {> return> x * y; }> int> main()> {> > int> r1 = mul(6, 7);> > float> r2 = mul(0.2, 3);> > cout <<> 'r1 is : '> << r1 << endl;> > cout <<> 'r2 is : '> << r2 << endl;> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>산출
r1 is : 42 r2 is : 0.6>
시간 복잡도: 오(1)
공간 복잡도: 오(1)
함수 오버로딩과 모호성
컴파일러가 오버로드된 함수 중에서 어떤 함수를 호출할지 결정할 수 없는 경우를 이러한 상황이라고 합니다. 함수 오버로딩 모호성.
컴파일러가 모호성 오류를 표시하면 컴파일러는 프로그램을 실행하지 않습니다.
모호함의 원인:
- 유형 변환.
- 기본 인수가 있는 함수입니다.
- 참조에 의한 전달 기능.
유형 변환:-
C++
#include> using> namespace> std;> void> fun(> int> );> void> fun(> float> );> void> fun(> int> i) { cout <<> 'Value of i is : '> << i << endl; }> void> fun(> float> j)> {> > cout <<> 'Value of j is : '> << j << endl;> }> int> main()> {> > fun(12);> > fun(1.2);> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
추상 수업
>
>
위의 예는 오류를 보여줍니다 오버로드된 'fun(double)' 호출이 모호합니다. . fun(10)은 첫 번째 함수를 호출합니다. fun(1.2)은 우리의 예측에 따라 두 번째 함수를 호출합니다. 그러나 이는 C++에서와 같은 함수를 참조하지 않으며 모든 부동 소수점 상수는 float가 아닌 double로 처리됩니다. float를 double로 바꾸면 프로그램이 작동합니다. 따라서 이는 float에서 double로의 유형 변환입니다.
기본 인수가 있는 함수:-
C++
#include> using> namespace> std;> void> fun(> int> );> void> fun(> int> ,> int> );> void> fun(> int> i) { cout <<> 'Value of i is : '> << i << endl; }> void> fun(> int> a,> int> b = 9)> {> > cout <<> 'Value of a is : '> << a << endl;> > cout <<> 'Value of b is : '> << b << endl;> }> int> main()> {> > fun(12);> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>
위의 예는 오류를 보여줍니다 오버로드된 'fun(int)' 호출이 모호합니다. . fun(int a, int b=9)는 두 가지 방법으로 호출할 수 있습니다. 첫 번째는 하나의 인수로 함수를 호출하는 것입니다(즉, fun(12)). 또 다른 방법은 두 개의 인수로 함수를 호출하는 것입니다(예: fun(4). ,5). fun(int i) 함수는 하나의 인수로 호출됩니다. 따라서 컴파일러는 fun(int i)와 fun(int a,int b=9) 중에서 선택할 수 없습니다.
참조로 전달 기능:-
C++
#include> using> namespace> std;> void> fun(> int> );> void> fun(> int> &);> int> main()> {> > int> a = 10;> > fun(a);> // error, which fun()?> > return> 0;> }> void> fun(> int> x) { cout <<> 'Value of x is : '> << x << endl; }> void> fun(> int> & b)> {> > cout <<> 'Value of b is : '> << b << endl;> }> // Code Submitted By Susobhan Akhuli> |
>
>
위의 예는 오류를 보여줍니다 오버로드된 'fun(int&)' 호출이 모호합니다. . 첫 번째 함수는 하나의 정수 인수를 사용하고 두 번째 함수는 참조 매개변수를 인수로 사용합니다. 이 경우 fun(int)와 fun(int &) 사이에 구문상의 차이가 없기 때문에 컴파일러는 사용자에게 어떤 함수가 필요한지 알 수 없습니다.
친구 기능
- 프렌드 함수는 클래스의 멤버 함수는 아니지만 클래스의 개인 데이터 및 보호된 데이터에 액세스할 수 있는 권한을 갖는 C++의 특수 함수입니다.
- 프렌드 함수(friend function)는 비멤버 함수이거나 클래스 내부에서 프렌드 키워드를 사용하여 선언된 클래스의 일반 함수이다. 함수를 친구로 선언하면 해당 함수에 모든 접근 권한이 부여됩니다.
- friend 키워드는 함수 선언에만 배치되고 함수 정의에는 배치되지 않습니다.
- 친구 함수가 호출되면 객체 이름이나 점 연산자가 사용되지 않습니다. 그러나 객체를 값에 액세스하려는 인수로 받아들일 수 있습니다.
- friend 함수는 클래스의 모든 섹션(예: public, private 또는 protected)에서 선언될 수 있습니다.
C++에서 친구 함수 선언
통사론:
class { friend (argument/s); };>
예_1: 친구 함수를 사용하여 두 숫자 중 가장 큰 숫자 찾기
C++
#include> using> namespace> std;> class> Largest {> > int> a, b, m;> public> :> > void> set_data();> > friend> void> find_max(Largest);> };> void> Largest::set_data()> {> > cout <<> 'Enter the first number : '> ;> > cin>> 아;> > cout <<> '
Enter the second number : '> ;> > cin>> ㄴ;> }> void> find_max(Largest t)> {> > if> (t.a>t.b)> > t.m = t.a;> > else> > t.m = t.b;> > cout <<> '
Largest number is '> << t.m;> }> int> main()> {> > Largest l;> > l.set_data();> > find_max(l);> > return> 0;> }> |
>
>
산출
Enter the first number : 789 Enter the second number : 982 Largest number is 982>