본문 바로가기

코딩/객체지향프로그래밍

[C++] 함수(1)

출처: https://commons.wikimedia.org/wiki/File:Function_machine2.svg

 


 

1. Declare(선언), Define(정의/구현), Call(호출) 

  1. 함수의 선언: main함수 위에서 함수의 입력 타입/이름/출력 타입 을 알려줌 ('prototyping'한다)
  2. 함수의 정의: main함수 아래에(*권장사항) 함수를 실제로 구현해줌 → 함수 여러 개를 main함수 위에서 선언과 정의를 동시에 하게되면 가장 실질적인 수행을 담당하는 main이 아래로 내려가버림, 실제로 프로그램의 사용자 입장에서는 입/출력 외에 함수 내부는 중요하지 않음
  3. 함수의 호출: main함수 안에서 실제로 구현한 함수를 사용
#include <iostream>

int myAdd(int p, int q); //1. 선언부: [출력 타입] [함수이름]([입력 타입])

int main() {
    int y, a = 3, b = 5;
    y = myAdd(a, b); //3. 호출
    
    return 0;
}

int myAdd(int p, int q) {
    return p + q; //2. 구현부: { 함수의 기능, return값 }
}

 

2. 함수의 Input/Return Value(입력/반환값) 유무

1. 입력/반환값이 없는 함수

void prompt() {
    cout << " Please enter an integer value: " << endl;
}
  • 출력(반환) 타입에 void
  • 입력 파라미터 자리 ()로 비워둠
  • 함수 body에 return 없음

 

2. 반환값이 있는 함수

int prompt() {
     int result;
     cout << "Please enter an integer value: ";
     cin >> result;
     return result;
}

//반환값이 있는 함수는 추후 main에서 호출하여 변수에 값 할당을 바로 할 수 있음
int main() {
    int value1, value2, sum;
    value1 = prompt();
    value2 = prompt();
    sum = value1 + value2;
    cout << value1 << " + " << value2 << " = " << sum << endl;
   
    return 0;
}
  • 출력(반환) 타입을 함수 이름 앞에 적어줌
  • 함수 body에 [return 결과] 명시

 

3. 입력/반환값이 있는 함수

int prompt(int n) {
    int result;
    cout << "Please enter integer #" << n << ": ";
    cin << result;
    return result;
}

int main() {
    int value1, value2, sum;
    value1 = prompt(1);
    value2 = prompt(2);
    sum = value1 + value2;
    cout << value1 << " + " << value2 << " = " << sum << endl;
    
    return 0;
}
  • 출력(반환) 타입을 함수 이름 앞에 적어줌
  • 입력 타입과 입력 파라미터 적어줌
  • 함수 body에 [return 결과] 명시

 

3. Library (라이브러리)

  • 기존에 만들어진 함수, 클래스들의 집합
  • #include <빌트인 라이브러리> or #include "사용자 정의 라이브러리"
  • 문장 끝에 [ ; ] 붙이지 않음
  • ex) #include <iostream> → 표준 입/출력 관련 라이브러리
  • ex) #include <cmath> → c++에서 쓸 수 있는 수학적 함수들의 집합
#include <iostream>
#inlcude <cmath>
using namespace std;

int main() {
    double input;
    cout << "Enter number: ";
    cin >> input;
    
    //ex) sprt는 cmath 안의 함수, cmath라이브러리를 include해야 쓸 수 있음
    double root = sqrt(input); 
    cout << "Square root of " << input << " = " << root << endl;
    
    //cmath 안의 다른 함수들
    cout << exp(input) << endl; //지수함수
    cout << log10(input) << endl; //로그함수 (10 안적어주면 밑이 e인 자연로그)
    cout << cos(input) << endl; //코사인함수
    
    return 0;
}

 

4. Default Arguments

  • 함수에 값을 할당하지 않았을 때(=입력값을 주지 않았을 때) 자동으로 내가 지정해놓은 값이 할당됨
  • 함수에 값 하나를 입력하면 가장 왼쪽에 있는 파라미터가 default가 아닌 입력해준 값으로 바뀜
  • default argument 걸어줄 시 선언부에만 !!! 구현부에서 사용 시 컴파일 에러
  • 항상 왼쪽-오른쪽으로 값 바뀜, 두 번째 입력 파라미터를 바꾸고 싶다고 함수 호출 시 ( , 1500) 할 수 없음 → 따라서 바뀔 가능성이 많은 값부터 앞에 놔두기! 값을 바꾸기 싫은 변수일수록 함수 파라미터 뒷 순서로 미루기
#include <iostream>
using namespace std;

//선언부
void applePrice(int a = 1000);

void point(int x = 3, int y = 4);

int main() {
    applePrice(1500);
    applePrice(500);
    applePrice(1000);
    applePrice(); // 함수에 값 할당하지 않아도 n=1000이 자동으로 할당됨
    
    point(1, 2); //1, 2 입력
    point(1); //1, 4 입력
    point(); //3, 4 입력
//  point(, 3) //3, 3 입력되는 게 아님!!!!  

    return 0;
}

//구현부
void applePrice(int a); { //int a = 1000 하면 error!!!!
    cout << "Price of an apple is " << a << endl;
}

void point(int x, int y); {
    cout << "Point : ( " << x << ", " << y << " )" << endl;
}

 


*)sample codes: https://github.com/halterman/CppBook-SourceCode

반응형

'코딩 > 객체지향프로그래밍' 카테고리의 다른 글

[C++] String, File - 문자열과 파일 (1)  (0) 2020.07.23
[C++] 조건문과 반복문 (2)  (0) 2020.07.21
[C++] 조건문과 반복문 (1)  (0) 2020.07.18
[C++] 함수(2)  (0) 2020.07.15
[C++] C++ basic  (0) 2020.07.13