SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
6. 함수
차 례 
• 함수의 역할 
• 사용자 정의함수 
• 헤더 파일 작성에서 전처리기 사용 
• 함수의 매개변수 전달 
• 함수와 const 활용 
• 함수 오버로딩 
• 구조체를 함수의 인수로 사용 
2/32
함수 
• 함수 
• 약속된 기능을 수행 
• 표준 함수 또는 표준 라이브러리 
• 컴파일러가 자주 사용하는 기능에 대해 이미 정의한 함수로써 함수가 
선언된 헤더파일을 포함하고 프로그램에서 호출해서 사용 
• 사용자 정의함수 
• 사용자가 필요에 의해 정의해서 사용하는 함수 
• 함수 선언, 정의, 호출을 모두 사용자가 직접 구현해야 함 
3/32
함수의 사용 예 
• strcpy_s( ) 함수의 사용 예 
#include <iostream> //strcpy_s() 함수 선언 
using namespace std; 
int main() //프로그램 시작과 끝을 담당 
{ 
char Name[50]; 
int FunResult; 
FunResult=strcpy_s(Name, 50, "채치수"); //함수 호출 
cout << FunResult << endl; 
cout << Name << endl; 
return 0; 
} 
strcpy_s() 함수 사용규칙에 맞게 사용해야 함 
50의 크기를 갖는 Name에 “채치수”를 복사 
4/32
함수 역할과 사용 1 
• 함수 종류 
• 표준 함수 : 표준 라이브러리라고도 함. 컴파일러에 의해 이미 정 
의된 함수, 자주 사용하는 기능 위주로 정의되어 있음 
예) 문자열 복사, 제곱근 계산 등 
• 사용자 정의함수 : 사용자가 필요에 의해 정의 
• main() 함수 : 프로그램 실행의 시작과 끝을 제어함, 실행 파일을 
작성할 때 반드시 하나의 main() 함수가 있어야 함 
5/32
함수 역할과 사용 2 
• 함수 선언 (프로토타입) 
• 컴파일러에게 함수의 사용 형태 정보 제공 
• 표준 함수인 경우 컴파일러에서 제공하는 헤더 파일에 함수가 선 
언되어 있음 
• 함수 정의 
• 함수의 실제 내용 
• 표준 함수인 경우 이미 정의되어 있음 
• 함수 호출 
• 함수 선언 형태에 맞게 함수를 사용 해야 함 
6/32
함수 역할과 사용 3 
• 함수 선언의 구성 
항목 의미 함수 선언에서 
입력 여러 가지 입력 가능 매개변수 
함수 함수를 구분하는 이름 함수 이름 
결과 
함수의 주어진 기능을 수행한 후 반환하는 값으로 
return 명령으로 실행됨 
반환 값 (하나의 값만 
이 반환될 수 있음) 
반환자료형 함수이름(매개변수,………………); 
errno_t strcpy_s(char *_Dst, rsize_t SizeInBytes, const char *_Src); 
7/32
함수 역할과 사용 3 
• strcpy_s()의 사용 예 
errno_t strcpy_s(char *_Dst, rsize_t SizeInBytes, const char *_Src) 
FunResult=strcpy_s(Name, 50, "채치수"); 
8/32
사용자 정의함수 
• 사용자가 필요에 의해 작성하고 함수 선언, 정의, 호출을 
모두 수행함 
• 사용자 정의함수 작성하기 – 기본순서 
1. 함수로 정의할 내용 결정하기  함수의 작업 순서 결정 
2. 함수의 프로토타입 결정하기  함수 리턴형, 함수 이름, 함수의 매개변수 
결정 
3. 함수 정의하기  함수를 프로그램 코드로 작성 
4. 정의된 형태로 함수 호출하기  함수 실행 확인을 위한 테스트 
9/32
사용자 정의 함수 – 함수 프로토타입 정하기!!! 
소스 6-2 (config.h) 
문제 : 여러 과목의 점수를 모두 합한 총점을 구하는 사용자 정의함수를 작성하자 
1) 함수 입력 값 
 여러 과목의 점수 들  변수로 입력 하려면 정확히 과목에 따라 매개변수로 
전달해야 함  배열로 처리하면 과목별 이름을 부여하지 않아도 됨!!!  정수 
배열 또는 배정도형 배열 (정수로 정의해 보자!!) 
 과목 수  배열로 과목 점수를 함수에 입력하는 경우 과목 수를 알아야 배열 
의 크기를 알 수 있다.  정수형 
2) 함수 결과 
 함수를 정상적으로 실행한 경우 결과값인 총점  정수형 
 함수를 비정상적으로 실행한 경우 오류를 나타내기 위해 -1을 리턴  정수형 
3) 함수 이름 
 TotalCalculation으로 하자. 
int TotalCalculation (int score[], int num); 
10/32
사용자 정의 함수 – 함수 정의하기!!! 
문제 : 여러 과목의 점수를 모두 합한 총점을 구하는 사용자 정의함수를 작성하자 
설명 프로그램 코드 완성된 함수 정의 
점수가 0보다 작은 경우 점수 
가 잘못 입력된 것이므로 -1을 
반환하고 함수를 종료함 
각 과목 점수를 과목 개수 만큼 
하나씩 확인해야 하므로 반복 
문 사용  반복문 제어 변수 
필요 
int i; 
for ( i=0 ; i<num; i++) 
{ 
if (score[i]<0) 
return -1; 
} 
int TotalCalculation (int score[], int num) 
{ 
int i, sum=0; 
for (i=0; i<num; i++) 
{ 
if (score[i] <0) 
return -1; 
} 
for (i=0; i<num; i++) 
sum += score[i]; 
return sum; 
} 
정상적인 점수가 입력된 경우 
총점을 계산함 
이때 과목 개수 만큼 반복문으 
로 총점을 누적하여 계산 총 
점 변수 필요 
int sum=0; 
for (i=0; i<num; i++) 
sum += score[i]; 
총점을 반환하여 함수를 종료 
함 return sum; 
소스 6-3 (ch06_02.cpp) 
11/32
사용자 정의 함수 – 함수 호출하기!!! 
소스 6-7 (ch06_02_main.cpp) 
문제 : 여러 과목의 점수를 모두 합한 총점을 구하는 사용자 정의함수를 작성하자 
main() 함수에서 직접 호출해서 테스트 하기!!! 
1) 함수호출은 함수의 프로토타입에 맞게 사용하면 된다. 
함수 이름 ( 매개변수 형식에 맞게 전달~ ) 
가) 매개변수가 일반 변수이면 값 이나 값을 저장한 변수 형태 
나) 매개변수가 포인터 변수이면 주소(변수의 주소, 배열의 이름 형태)를 전달 
2) 반환값을 사용할 경우 함수 반환값 자료형의 변수에 할당 
int s[6]={100, 90, 76, 89, 100, 88}, sum=0; 
sum=TotalCalculation( s, 6); //반환값을 sum 변수에 할당!!! 
if (sum!=-1) 
cout << “총점 : “ << sum << endl; 
12/32
헤더파일 작성에서 전처리기 사용 
• 전처리기 (preprocessor) 
• 컴파일 전에 처리하기 
• ‘#’ 기호로 시작함 
#define //기호상수 정의 
#ifdef ~#else~#endif //지정한 기호상수가 정의되어 있다면~ 
#ifndef~#else~#endif //지정한 기호상수가 정의되어 있지 않다면~ 
#define : 기호상수 정의하기 
#ifdef~ ① #else ② #endif : ifdef 이후 지정한 기호상수가 정의되 
어 있으면 ①을 실행, 아니면 ②를 실행 
13/32
소스 6-7 (ch06_03.cpp) 
#include <iostream> 
//#define TEST 
using namespace std; 
int main() 
{ 
cout << "*********************" << endl; 
#ifdef TEST 
cout << " TESTTESTTESTTEST " << endl; 
#else 
cout << "*********************" << endl; 
#endif 
return 0; 
} 
14/32
소스 6-7 (ch06_03.cpp) 
#include <iostream> 
#define TEST 
using namespace std; 
int main() 
{ 
cout << "*********************" << endl; 
#ifdef TEST 
cout << " TESTTESTTESTTEST " << endl; 
#else 
cout << "*********************" << endl; 
#endif 
return 0; 
} 
15/32
CONFIG.H 파일 수정하기 
• 사용자가 정의한 헤더파일의 중복 참조를 막기 위해 전 
처리기로 표시 
#ifndef _CONFIG_H_ 
#define _CONFIG_H_ 
#include <iostream> 
using namespace std; 
int TotalCalculation (int jumsu[], int num); 
float Round(float average, int digits); 
#else 
#endif 
일반적으로 사용자 정의헤더파일 식별을 위 
한 기호상수는 파일이름을 대문자로 앞뒤, 중 
간을 밑줄(_)로 함께 표기해서 사용~ 
16/32
함수의 매개변수 전달 
• 매개변수 : 
• 함수 실행에 필요한 값을 함수 호출에서 전달하는 역할 
• 매개변수로 전달된 값이 함수 내에서 값이 변경되지 않을 경우 
const로 표기  사용자에게 함수의 매개변수 값을 예측하도록 
도움을 줌 
errno_t strcpy_s(char *_Dst, rsize_t SizeInBytes, const char 
*_Src); 
strcpy_s() 함수 실 
행에서 입력값의 역 
할을 의미함 
strcpy_s() 함수 실 
행 후 값이 수정될 
수 있음(출력값)을 
의미함 
17/32
값 전달 하기(CALL BY VALUE) 
• 함수 선언에서 인수가 일반 변수 형태 
• 함수가 호출될 때 값이 전달됨 
• 전달된 매개변수와 함수 실행 시 사용한 실인수가 별도의 기억공 
간 
int TestFunc1(int a); //선언된 함수를 아래와 같이 호출한 경우 
……………………………………. 
int b=200; 
cout << “b=“ << b << endl; 
TestFunc1(b); // TestFunc1() 함수에 변수 b에 저장된 200이 전달됨 
cout << “b=“ << b << endl; //변수 b는 TestFunc1() 함수 실행 후에도 값이 영향 받지 
않아 200이 출력됨 
18/32
소스 6-12 (ch06_04.cpp) 
int TestFunc1(int a); //함수 선언 
int main() 
{ 
int b=200; 
cout << "b= " << b << endl; 
TestFunc1(b); //함수 호출, 11번 
cout << "b= " << b << endl; 
TestFunc1(999); //함수 호출 
return 0; 
} 
int TestFunc1(int a) //함수 정의 
{ 
cout << "a= " << a << endl; 
a=100; 
cout << "a= " << a << endl; 
return 0; 
} 19/32
주소 전달하기 (CALL BY REFERENCE) 
• 함수 선언에서 인수가 포인터 또는 배열 형태 또는 레퍼 
런스 변수 형태 
• 함수가 호출될 때 주소가 전달됨 
• 함수 실행에서 함수 호출에 전달된 기억공간을 참조할 수 있음 
int TestFunc2(int &a); //레퍼런스 변수 
int TestFunc3(int *a); //포인터 변수 
……………………………… 
int b=200; 
TestFunc2(b); //레퍼런스 변수에 매개변수 전달하기 
TestFunc3(&b); //포인터변수에 매개변수 전달하기 
20/32
소스 6-14 (ch06_04.cpp) 
int TestFunc2(int &a); //레퍼런스 변수 
int TestFunc3(int *a); //포인터 변수 
int main() 
{ 
int b=200; 
int &r_b=b; 
cout << "b= " << b << endl; 
TestFunc1(b); 
cout << "b= " << b << endl; 
TestFunc1(999); 
cout << "************************************" << endl; 
TestFunc2(r_b); 
cout << "b= " << b << endl; 
cout << "************************************" << endl; 
return 0; 
} 
21/32
int TestFunc2(int &a) 
{ 
cout << "a= " << a << endl; 
a=777; //매개변수 값 갱신 
cout << "a= " << a << endl; 
return 0; 
} 
int TestFunc3(int *a) 
{ 
cout << "*a= " << *a << endl; 
*a=999; //매개변수 값 갱신 
cout << "*a= " << *a << endl; 
return 0; 
} 
22/32
디폴트 매개변수 
• 함수 선언에서 함수의 매개변수에 초기값을 정하고, 함 
수 호출에서 매개변수를 전달하지 않은 경우 초기값으로 
함수의 인수 값을 설정!! 
int TestFunc4(int a=888); //디폴트 매개변수를 사용한 함수 선언 
TestFunc4() 함수는 다음의 형태로 호출 가능하다. 
 TestFunc4(20); 
 int b=200; TestFunc4(b); 
 TestFunc4(); //매개변수 전달 없이 호출한 경우 TestFunc4() 함수의 실변수 
a는 888로 할당됨 
23/32
소스 6-15 (ch06_06.cpp) 
int TestFunc4(int a=888); 
int main() 
{ 
………………………………………. 
TestFunc4(b); 
TestFunc4(); 
return 0; 
} 
int TestFunc4(int a) 
{ 
cout << "a= " << a << endl; 
a=100; 
cout << "a= " << a << endl; 
return 0; 
} 
24/32
함수와 CONST 활용 
• 함수의 매개변수에 const를 명시하면 함수 내에서 값을 
변경할 수 없다. 따라서 함수 실행에서 입력 값으로 사용 
됨을 의미한다. 
• 소스 6-17(config.h), 
• 소스 6-18(ch06_1_02.cpp), 
• 소스 6-19(ch06_1_02_main.cpp) 
25/32
함수 오버로딩 
• 함수 오버로딩(Function Overloading)은 동일한 함수 이 
름이면서 함수 반환형과 함수의 매개변수를 다르게 하여 
함수를 재정의하는 것을 말한다. 
• 즉, 함수의 식별에 함수의 반환형, 함수이름, 매개변수를 
사용하는 것을 의미한다. 
26/32
함수 오버로딩 예 
• 두 개의 값을 비교해서 첫 번째 매개변수가 크면 1, 같으 
면 0, 두 번째 매개변수가 크면 -1을 반환하는 함수를 작 
성하자. 이때 두 개의 값은 정수, 실수, 문자 또는 문자열 
모두 대상으로 한다. 
//함수 오버로딩이 지원되지 않으면 매번 다른 함수 이름을 사용해야 함!!! 
int Compare_int(const int a, const int b); 
int Compare_float(const float a, const float b); 
int Compare_char(const char a, const char b); 
int Compare_str(const char str1[], const char str2[]); 
//함수 오버로딩이 지원되므로 함수이름은 같고 매개변수가 다른 형태로 정의 가능함!! 
int Compare(const int a, const int b); 
int Compare(const float a, const float b); 
int Compare(const char a, const char b); 
int Compare(const char str1[], const char str2[]); 27/32
소스 6-20 (ch06_compare.h), 소스 6- 21 (ch06_06_compare.cpp), 
소스 6-22(ch06_06_main.cpp) 
//ch06_compare.h 
#ifndef _CH06_COMPARE_H_ 
#define _CH06_COMPARE_H_ 
#include <iostream> 
using namespace std; 
int Compare(const int a, const int b); 
int Compare(const float a, const float b); 
int Compare(const char a, const char b); 
int Compare(const char str1[], const char str2[]); 
#else 
#endif 
//ch06_06_compare.cpp 
#include "ch06_compare.h" 
int Compare(const int a, const int b) 
{ 
if (a>b) 
return 1; 
else if (a==b) 
return 0; 
else 
return -1; 
} 
int Compare(const float a, const float b) 
{ 
if (a>b) 
return 1; 
else if (a==b) 
return 0; 
else 
return -1; 
} 28/32
int Compare(const char a, const char b) 
{ 
if (a>b) 
return 1; 
else if (a==b) 
return 0; 
else 
return -1; 
} 
int Compare(const char str1[], const char str2[]) 
{ 
int i; 
for (i=0; str1[i]!='0' && str2[i]!='0'; i++) 
{ 
if (str1[i]>str2[i]) 
return 1; 
else if (str1[i]<str2[i]) 
return -1; 
else 
; 
} 
if (str1[i]=='0' && str2[i]!='0') 
return -1; 
else if (str1[i]!='0' && str2[i]=='0') 
return 1; 
else 
return 0; 
} 
//ch06_06_main.cpp 
#include "ch06_compare.h" 
int main() 
{ 
int a=34, b=4; 
float c=1.234f, d=98.34f; 
char e='H', f='K'; 
char str1[]="computer", 
str2[]="computers"; 
printf ("%dn", Compare(a, b)); 
printf ("%dn", Compare(c, d)); 
printf ("%dn", Compare(e, f)); 
printf ("%dn", Compare(str1, str2)); 
return 0; 
} 
29/32
구조체를 함수의 인수로 사용 
• 함수의 인수로 구조체 변수(Call by Value), 구조체 포인 
터 변수, 구조체 배열 모두 사용 가능하다. 
30/32
6장 정리 1 
• 함수는 일련의 주어진 기능을 갖고 있다. 
• 자주 사용하는 기능은 C++ 컴파일러가 함수로 정의해서 
제공한다.  표준 함수 
• 정의되지 않은 함수는 사용자가 정의해서 사용할 수 있 
다.  사용자 정의함수 
• 함수는 함수 선언, 함수 정의, 함수 호출로 코드가 구분 
될 수 있다. 
31/32
6장 정리 1 
• C++에서 함수는 함수 오버로딩을 제공한다. 
• 함수 이름이 같으나 반환형과 매개변수를 다르게 해서 재정의 가 
능하다!!! 
• 함수 디폴트 매개변수를 제공하여 함수 매개변수 전달 없이 호출 
할 때 사용된다. 
32/32

Mais conteúdo relacionado

Mais procurados

14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿유석 남
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기Jongwook Choi
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1Chris Ohk
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료욱진 양
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitiveNAVER D2
 
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Circulus
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리ETRIBE_STG
 
Nexon Developers Conference 2017 Functional Programming for better code - Mod...
Nexon Developers Conference 2017 Functional Programming for better code - Mod...Nexon Developers Conference 2017 Functional Programming for better code - Mod...
Nexon Developers Conference 2017 Functional Programming for better code - Mod...Isaac Jeon
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeYoung-Beom Rhee
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍Young-Beom Rhee
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
 
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Young-Beom Rhee
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍흥배 최
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409Yong Joon Moon
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)Sang Don Kim
 

Mais procurados (20)

14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
 
Nexon Developers Conference 2017 Functional Programming for better code - Mod...
Nexon Developers Conference 2017 Functional Programming for better code - Mod...Nexon Developers Conference 2017 Functional Programming for better code - Mod...
Nexon Developers Conference 2017 Functional Programming for better code - Mod...
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
C++11
C++11C++11
C++11
 
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
 
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
 
Boost
BoostBoost
Boost
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 

Semelhante a 06장 함수

04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용유석 남
 
20150212 c++11 features used in crow
20150212 c++11 features used in crow20150212 c++11 features used in crow
20150212 c++11 features used in crowJaeseung Ha
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택JinTaek Seo
 
Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉HyunJoon Park
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선daewon jeong
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)유익아카데미
 
C Language I
C Language IC Language I
C Language ISuho Kwon
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2Chris Ohk
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229Yong Joon Moon
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오Taeoh Kim
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 명신 김
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가Vong Sik Kong
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차Han Sung Kim
 
[Swift] Functions
[Swift] Functions[Swift] Functions
[Swift] FunctionsBill Kim
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)유석 남
 

Semelhante a 06장 함수 (20)

함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용
 
20150212 c++11 features used in crow
20150212 c++11 features used in crow20150212 c++11 features used in crow
20150212 c++11 features used in crow
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
 
Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
 
C Language I
C Language IC Language I
C Language I
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
C review
C  reviewC  review
C review
 
C++11
C++11C++11
C++11
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차
 
[Swift] Functions
[Swift] Functions[Swift] Functions
[Swift] Functions
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)
 

Mais de 유석 남

02장 Introduction to Java Applications
02장 Introduction to Java Applications02장 Introduction to Java Applications
02장 Introduction to Java Applications유석 남
 
01장 Introduction to Computers and Java
01장 Introduction to Computers and Java01장 Introduction to Computers and Java
01장 Introduction to Computers and Java유석 남
 
13장 연산자 오버로딩
13장 연산자 오버로딩13장 연산자 오버로딩
13장 연산자 오버로딩유석 남
 
11장 상속
11장 상속11장 상속
11장 상속유석 남
 
10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스유석 남
 
09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)유석 남
 
08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)유석 남
 
05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체유석 남
 
03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스유석 남
 
[20140624]소개자료
[20140624]소개자료[20140624]소개자료
[20140624]소개자료유석 남
 

Mais de 유석 남 (11)

02장 Introduction to Java Applications
02장 Introduction to Java Applications02장 Introduction to Java Applications
02장 Introduction to Java Applications
 
01장 Introduction to Computers and Java
01장 Introduction to Computers and Java01장 Introduction to Computers and Java
01장 Introduction to Computers and Java
 
13장 연산자 오버로딩
13장 연산자 오버로딩13장 연산자 오버로딩
13장 연산자 오버로딩
 
11장 상속
11장 상속11장 상속
11장 상속
 
10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스
 
09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)
 
08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)
 
05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체
 
03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스
 
[20140624]소개자료
[20140624]소개자료[20140624]소개자료
[20140624]소개자료
 
Example
ExampleExample
Example
 

06장 함수

  • 2. 차 례 • 함수의 역할 • 사용자 정의함수 • 헤더 파일 작성에서 전처리기 사용 • 함수의 매개변수 전달 • 함수와 const 활용 • 함수 오버로딩 • 구조체를 함수의 인수로 사용 2/32
  • 3. 함수 • 함수 • 약속된 기능을 수행 • 표준 함수 또는 표준 라이브러리 • 컴파일러가 자주 사용하는 기능에 대해 이미 정의한 함수로써 함수가 선언된 헤더파일을 포함하고 프로그램에서 호출해서 사용 • 사용자 정의함수 • 사용자가 필요에 의해 정의해서 사용하는 함수 • 함수 선언, 정의, 호출을 모두 사용자가 직접 구현해야 함 3/32
  • 4. 함수의 사용 예 • strcpy_s( ) 함수의 사용 예 #include <iostream> //strcpy_s() 함수 선언 using namespace std; int main() //프로그램 시작과 끝을 담당 { char Name[50]; int FunResult; FunResult=strcpy_s(Name, 50, "채치수"); //함수 호출 cout << FunResult << endl; cout << Name << endl; return 0; } strcpy_s() 함수 사용규칙에 맞게 사용해야 함 50의 크기를 갖는 Name에 “채치수”를 복사 4/32
  • 5. 함수 역할과 사용 1 • 함수 종류 • 표준 함수 : 표준 라이브러리라고도 함. 컴파일러에 의해 이미 정 의된 함수, 자주 사용하는 기능 위주로 정의되어 있음 예) 문자열 복사, 제곱근 계산 등 • 사용자 정의함수 : 사용자가 필요에 의해 정의 • main() 함수 : 프로그램 실행의 시작과 끝을 제어함, 실행 파일을 작성할 때 반드시 하나의 main() 함수가 있어야 함 5/32
  • 6. 함수 역할과 사용 2 • 함수 선언 (프로토타입) • 컴파일러에게 함수의 사용 형태 정보 제공 • 표준 함수인 경우 컴파일러에서 제공하는 헤더 파일에 함수가 선 언되어 있음 • 함수 정의 • 함수의 실제 내용 • 표준 함수인 경우 이미 정의되어 있음 • 함수 호출 • 함수 선언 형태에 맞게 함수를 사용 해야 함 6/32
  • 7. 함수 역할과 사용 3 • 함수 선언의 구성 항목 의미 함수 선언에서 입력 여러 가지 입력 가능 매개변수 함수 함수를 구분하는 이름 함수 이름 결과 함수의 주어진 기능을 수행한 후 반환하는 값으로 return 명령으로 실행됨 반환 값 (하나의 값만 이 반환될 수 있음) 반환자료형 함수이름(매개변수,………………); errno_t strcpy_s(char *_Dst, rsize_t SizeInBytes, const char *_Src); 7/32
  • 8. 함수 역할과 사용 3 • strcpy_s()의 사용 예 errno_t strcpy_s(char *_Dst, rsize_t SizeInBytes, const char *_Src) FunResult=strcpy_s(Name, 50, "채치수"); 8/32
  • 9. 사용자 정의함수 • 사용자가 필요에 의해 작성하고 함수 선언, 정의, 호출을 모두 수행함 • 사용자 정의함수 작성하기 – 기본순서 1. 함수로 정의할 내용 결정하기  함수의 작업 순서 결정 2. 함수의 프로토타입 결정하기  함수 리턴형, 함수 이름, 함수의 매개변수 결정 3. 함수 정의하기  함수를 프로그램 코드로 작성 4. 정의된 형태로 함수 호출하기  함수 실행 확인을 위한 테스트 9/32
  • 10. 사용자 정의 함수 – 함수 프로토타입 정하기!!! 소스 6-2 (config.h) 문제 : 여러 과목의 점수를 모두 합한 총점을 구하는 사용자 정의함수를 작성하자 1) 함수 입력 값  여러 과목의 점수 들  변수로 입력 하려면 정확히 과목에 따라 매개변수로 전달해야 함  배열로 처리하면 과목별 이름을 부여하지 않아도 됨!!!  정수 배열 또는 배정도형 배열 (정수로 정의해 보자!!)  과목 수  배열로 과목 점수를 함수에 입력하는 경우 과목 수를 알아야 배열 의 크기를 알 수 있다.  정수형 2) 함수 결과  함수를 정상적으로 실행한 경우 결과값인 총점  정수형  함수를 비정상적으로 실행한 경우 오류를 나타내기 위해 -1을 리턴  정수형 3) 함수 이름  TotalCalculation으로 하자. int TotalCalculation (int score[], int num); 10/32
  • 11. 사용자 정의 함수 – 함수 정의하기!!! 문제 : 여러 과목의 점수를 모두 합한 총점을 구하는 사용자 정의함수를 작성하자 설명 프로그램 코드 완성된 함수 정의 점수가 0보다 작은 경우 점수 가 잘못 입력된 것이므로 -1을 반환하고 함수를 종료함 각 과목 점수를 과목 개수 만큼 하나씩 확인해야 하므로 반복 문 사용  반복문 제어 변수 필요 int i; for ( i=0 ; i<num; i++) { if (score[i]<0) return -1; } int TotalCalculation (int score[], int num) { int i, sum=0; for (i=0; i<num; i++) { if (score[i] <0) return -1; } for (i=0; i<num; i++) sum += score[i]; return sum; } 정상적인 점수가 입력된 경우 총점을 계산함 이때 과목 개수 만큼 반복문으 로 총점을 누적하여 계산 총 점 변수 필요 int sum=0; for (i=0; i<num; i++) sum += score[i]; 총점을 반환하여 함수를 종료 함 return sum; 소스 6-3 (ch06_02.cpp) 11/32
  • 12. 사용자 정의 함수 – 함수 호출하기!!! 소스 6-7 (ch06_02_main.cpp) 문제 : 여러 과목의 점수를 모두 합한 총점을 구하는 사용자 정의함수를 작성하자 main() 함수에서 직접 호출해서 테스트 하기!!! 1) 함수호출은 함수의 프로토타입에 맞게 사용하면 된다. 함수 이름 ( 매개변수 형식에 맞게 전달~ ) 가) 매개변수가 일반 변수이면 값 이나 값을 저장한 변수 형태 나) 매개변수가 포인터 변수이면 주소(변수의 주소, 배열의 이름 형태)를 전달 2) 반환값을 사용할 경우 함수 반환값 자료형의 변수에 할당 int s[6]={100, 90, 76, 89, 100, 88}, sum=0; sum=TotalCalculation( s, 6); //반환값을 sum 변수에 할당!!! if (sum!=-1) cout << “총점 : “ << sum << endl; 12/32
  • 13. 헤더파일 작성에서 전처리기 사용 • 전처리기 (preprocessor) • 컴파일 전에 처리하기 • ‘#’ 기호로 시작함 #define //기호상수 정의 #ifdef ~#else~#endif //지정한 기호상수가 정의되어 있다면~ #ifndef~#else~#endif //지정한 기호상수가 정의되어 있지 않다면~ #define : 기호상수 정의하기 #ifdef~ ① #else ② #endif : ifdef 이후 지정한 기호상수가 정의되 어 있으면 ①을 실행, 아니면 ②를 실행 13/32
  • 14. 소스 6-7 (ch06_03.cpp) #include <iostream> //#define TEST using namespace std; int main() { cout << "*********************" << endl; #ifdef TEST cout << " TESTTESTTESTTEST " << endl; #else cout << "*********************" << endl; #endif return 0; } 14/32
  • 15. 소스 6-7 (ch06_03.cpp) #include <iostream> #define TEST using namespace std; int main() { cout << "*********************" << endl; #ifdef TEST cout << " TESTTESTTESTTEST " << endl; #else cout << "*********************" << endl; #endif return 0; } 15/32
  • 16. CONFIG.H 파일 수정하기 • 사용자가 정의한 헤더파일의 중복 참조를 막기 위해 전 처리기로 표시 #ifndef _CONFIG_H_ #define _CONFIG_H_ #include <iostream> using namespace std; int TotalCalculation (int jumsu[], int num); float Round(float average, int digits); #else #endif 일반적으로 사용자 정의헤더파일 식별을 위 한 기호상수는 파일이름을 대문자로 앞뒤, 중 간을 밑줄(_)로 함께 표기해서 사용~ 16/32
  • 17. 함수의 매개변수 전달 • 매개변수 : • 함수 실행에 필요한 값을 함수 호출에서 전달하는 역할 • 매개변수로 전달된 값이 함수 내에서 값이 변경되지 않을 경우 const로 표기  사용자에게 함수의 매개변수 값을 예측하도록 도움을 줌 errno_t strcpy_s(char *_Dst, rsize_t SizeInBytes, const char *_Src); strcpy_s() 함수 실 행에서 입력값의 역 할을 의미함 strcpy_s() 함수 실 행 후 값이 수정될 수 있음(출력값)을 의미함 17/32
  • 18. 값 전달 하기(CALL BY VALUE) • 함수 선언에서 인수가 일반 변수 형태 • 함수가 호출될 때 값이 전달됨 • 전달된 매개변수와 함수 실행 시 사용한 실인수가 별도의 기억공 간 int TestFunc1(int a); //선언된 함수를 아래와 같이 호출한 경우 ……………………………………. int b=200; cout << “b=“ << b << endl; TestFunc1(b); // TestFunc1() 함수에 변수 b에 저장된 200이 전달됨 cout << “b=“ << b << endl; //변수 b는 TestFunc1() 함수 실행 후에도 값이 영향 받지 않아 200이 출력됨 18/32
  • 19. 소스 6-12 (ch06_04.cpp) int TestFunc1(int a); //함수 선언 int main() { int b=200; cout << "b= " << b << endl; TestFunc1(b); //함수 호출, 11번 cout << "b= " << b << endl; TestFunc1(999); //함수 호출 return 0; } int TestFunc1(int a) //함수 정의 { cout << "a= " << a << endl; a=100; cout << "a= " << a << endl; return 0; } 19/32
  • 20. 주소 전달하기 (CALL BY REFERENCE) • 함수 선언에서 인수가 포인터 또는 배열 형태 또는 레퍼 런스 변수 형태 • 함수가 호출될 때 주소가 전달됨 • 함수 실행에서 함수 호출에 전달된 기억공간을 참조할 수 있음 int TestFunc2(int &a); //레퍼런스 변수 int TestFunc3(int *a); //포인터 변수 ……………………………… int b=200; TestFunc2(b); //레퍼런스 변수에 매개변수 전달하기 TestFunc3(&b); //포인터변수에 매개변수 전달하기 20/32
  • 21. 소스 6-14 (ch06_04.cpp) int TestFunc2(int &a); //레퍼런스 변수 int TestFunc3(int *a); //포인터 변수 int main() { int b=200; int &r_b=b; cout << "b= " << b << endl; TestFunc1(b); cout << "b= " << b << endl; TestFunc1(999); cout << "************************************" << endl; TestFunc2(r_b); cout << "b= " << b << endl; cout << "************************************" << endl; return 0; } 21/32
  • 22. int TestFunc2(int &a) { cout << "a= " << a << endl; a=777; //매개변수 값 갱신 cout << "a= " << a << endl; return 0; } int TestFunc3(int *a) { cout << "*a= " << *a << endl; *a=999; //매개변수 값 갱신 cout << "*a= " << *a << endl; return 0; } 22/32
  • 23. 디폴트 매개변수 • 함수 선언에서 함수의 매개변수에 초기값을 정하고, 함 수 호출에서 매개변수를 전달하지 않은 경우 초기값으로 함수의 인수 값을 설정!! int TestFunc4(int a=888); //디폴트 매개변수를 사용한 함수 선언 TestFunc4() 함수는 다음의 형태로 호출 가능하다.  TestFunc4(20);  int b=200; TestFunc4(b);  TestFunc4(); //매개변수 전달 없이 호출한 경우 TestFunc4() 함수의 실변수 a는 888로 할당됨 23/32
  • 24. 소스 6-15 (ch06_06.cpp) int TestFunc4(int a=888); int main() { ………………………………………. TestFunc4(b); TestFunc4(); return 0; } int TestFunc4(int a) { cout << "a= " << a << endl; a=100; cout << "a= " << a << endl; return 0; } 24/32
  • 25. 함수와 CONST 활용 • 함수의 매개변수에 const를 명시하면 함수 내에서 값을 변경할 수 없다. 따라서 함수 실행에서 입력 값으로 사용 됨을 의미한다. • 소스 6-17(config.h), • 소스 6-18(ch06_1_02.cpp), • 소스 6-19(ch06_1_02_main.cpp) 25/32
  • 26. 함수 오버로딩 • 함수 오버로딩(Function Overloading)은 동일한 함수 이 름이면서 함수 반환형과 함수의 매개변수를 다르게 하여 함수를 재정의하는 것을 말한다. • 즉, 함수의 식별에 함수의 반환형, 함수이름, 매개변수를 사용하는 것을 의미한다. 26/32
  • 27. 함수 오버로딩 예 • 두 개의 값을 비교해서 첫 번째 매개변수가 크면 1, 같으 면 0, 두 번째 매개변수가 크면 -1을 반환하는 함수를 작 성하자. 이때 두 개의 값은 정수, 실수, 문자 또는 문자열 모두 대상으로 한다. //함수 오버로딩이 지원되지 않으면 매번 다른 함수 이름을 사용해야 함!!! int Compare_int(const int a, const int b); int Compare_float(const float a, const float b); int Compare_char(const char a, const char b); int Compare_str(const char str1[], const char str2[]); //함수 오버로딩이 지원되므로 함수이름은 같고 매개변수가 다른 형태로 정의 가능함!! int Compare(const int a, const int b); int Compare(const float a, const float b); int Compare(const char a, const char b); int Compare(const char str1[], const char str2[]); 27/32
  • 28. 소스 6-20 (ch06_compare.h), 소스 6- 21 (ch06_06_compare.cpp), 소스 6-22(ch06_06_main.cpp) //ch06_compare.h #ifndef _CH06_COMPARE_H_ #define _CH06_COMPARE_H_ #include <iostream> using namespace std; int Compare(const int a, const int b); int Compare(const float a, const float b); int Compare(const char a, const char b); int Compare(const char str1[], const char str2[]); #else #endif //ch06_06_compare.cpp #include "ch06_compare.h" int Compare(const int a, const int b) { if (a>b) return 1; else if (a==b) return 0; else return -1; } int Compare(const float a, const float b) { if (a>b) return 1; else if (a==b) return 0; else return -1; } 28/32
  • 29. int Compare(const char a, const char b) { if (a>b) return 1; else if (a==b) return 0; else return -1; } int Compare(const char str1[], const char str2[]) { int i; for (i=0; str1[i]!='0' && str2[i]!='0'; i++) { if (str1[i]>str2[i]) return 1; else if (str1[i]<str2[i]) return -1; else ; } if (str1[i]=='0' && str2[i]!='0') return -1; else if (str1[i]!='0' && str2[i]=='0') return 1; else return 0; } //ch06_06_main.cpp #include "ch06_compare.h" int main() { int a=34, b=4; float c=1.234f, d=98.34f; char e='H', f='K'; char str1[]="computer", str2[]="computers"; printf ("%dn", Compare(a, b)); printf ("%dn", Compare(c, d)); printf ("%dn", Compare(e, f)); printf ("%dn", Compare(str1, str2)); return 0; } 29/32
  • 30. 구조체를 함수의 인수로 사용 • 함수의 인수로 구조체 변수(Call by Value), 구조체 포인 터 변수, 구조체 배열 모두 사용 가능하다. 30/32
  • 31. 6장 정리 1 • 함수는 일련의 주어진 기능을 갖고 있다. • 자주 사용하는 기능은 C++ 컴파일러가 함수로 정의해서 제공한다.  표준 함수 • 정의되지 않은 함수는 사용자가 정의해서 사용할 수 있 다.  사용자 정의함수 • 함수는 함수 선언, 함수 정의, 함수 호출로 코드가 구분 될 수 있다. 31/32
  • 32. 6장 정리 1 • C++에서 함수는 함수 오버로딩을 제공한다. • 함수 이름이 같으나 반환형과 매개변수를 다르게 해서 재정의 가 능하다!!! • 함수 디폴트 매개변수를 제공하여 함수 매개변수 전달 없이 호출 할 때 사용된다. 32/32