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
문제 : 여러 과목의 점수를 모두 합한 총점을 구하는 사용자 정의함수를 작성하자
사용자 정의 함수 – 함수 프로토타입 정하기!!!
1) 함수 입력 값
 여러 과목의 점수 들  변수로 입력 하려면 정확히 과목에 따라 매개변수로
전달해야 함  배열로 처리하면 과목별 이름을 부여하지 않아도 됨!!!  정수
배열 또는 배정도형 배열 (정수로 정의해 보자!!)
 과목 수  배열로 과목 점수를 함수에 입력하는 경우 과목 수를 알아야 배열
의 크기를 알 수 있다.  정수형
2) 함수 결과
 함수를 정상적으로 실행한 경우 결과값인 총점  정수형
 함수를 비정상적으로 실행한 경우 오류를 나타내기 위해 -1을 리턴  정수형
3) 함수 이름
 TotalCalculation으로 하자.
int TotalCalculation (int score[], int num);
소스 6-2 (config.h)
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
문제 : 여러 과목의 점수를 모두 합한 총점을 구하는 사용자 정의함수를 작성하자
사용자 정의 함수 – 함수 호출하기!!!
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;
소스 6-7 (ch06_02_main.cpp)
12/32
헤더파일 작성에서 전처리기 사용
• 전처리기 (preprocessor)
• 컴파일 전에 처리하기
• ‘#’ 기호로 시작함
#define : 기호상수 정의하기
#ifdef~ ① #else ② #endif : ifdef 이후 지정한 기호상수가 정의되
어 있으면 ①을 실행, 아니면 ②를 실행
#define //기호상수 정의
#ifdef ~#else~#endif //지정한 기호상수가 정의되어 있다면~
#ifndef~#else~#endif //지정한 기호상수가 정의되어 있지 않다면~
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

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
 
2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자Circulus
 
[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
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료욱진 양
 
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
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1Chris Ohk
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍Young-Beom Rhee
 
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
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍흥배 최
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리ETRIBE_STG
 
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Circulus
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발흥배 최
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택JinTaek Seo
 
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 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11흥배 최
 

Mais procurados (20)

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
 
2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자
 
C++11
C++11C++11
C++11
 
[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
 
Boost
BoostBoost
Boost
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
 
2013 C++ Study For Students #1
2013 C++ Study For Students #12013 C++ Study For Students #1
2013 C++ Study For Students #1
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 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...
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
 
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리
 
5 swift 기초함수
5 swift 기초함수5 swift 기초함수
5 swift 기초함수
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
 
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...
 
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11
 

Destaque

Movie maker 詳解 登晨
Movie maker 詳解 登晨Movie maker 詳解 登晨
Movie maker 詳解 登晨Tina Liao
 
Larkin Health Sciences Campus at Mandarin Lakes
Larkin Health Sciences Campus at Mandarin LakesLarkin Health Sciences Campus at Mandarin Lakes
Larkin Health Sciences Campus at Mandarin LakesJack Michel MD
 
Generaciones de las computadoras
Generaciones de las computadorasGeneraciones de las computadoras
Generaciones de las computadorasLuisToledo37
 
100 preguntasquimica
100 preguntasquimica100 preguntasquimica
100 preguntasquimicadaesel
 
Epaper surya 7 oktober 2013
Epaper surya 7 oktober 2013Epaper surya 7 oktober 2013
Epaper surya 7 oktober 2013Portal Surya
 
Hechizo para san valentin con cristales
Hechizo para san valentin con cristalesHechizo para san valentin con cristales
Hechizo para san valentin con cristalesAlejandra Prolo
 
21st Century Socialism and Ecological Marxism _1_
21st Century Socialism and Ecological Marxism _1_21st Century Socialism and Ecological Marxism _1_
21st Century Socialism and Ecological Marxism _1_Dr. Kanchan Kr. Bhowmik
 

Destaque (7)

Movie maker 詳解 登晨
Movie maker 詳解 登晨Movie maker 詳解 登晨
Movie maker 詳解 登晨
 
Larkin Health Sciences Campus at Mandarin Lakes
Larkin Health Sciences Campus at Mandarin LakesLarkin Health Sciences Campus at Mandarin Lakes
Larkin Health Sciences Campus at Mandarin Lakes
 
Generaciones de las computadoras
Generaciones de las computadorasGeneraciones de las computadoras
Generaciones de las computadoras
 
100 preguntasquimica
100 preguntasquimica100 preguntasquimica
100 preguntasquimica
 
Epaper surya 7 oktober 2013
Epaper surya 7 oktober 2013Epaper surya 7 oktober 2013
Epaper surya 7 oktober 2013
 
Hechizo para san valentin con cristales
Hechizo para san valentin con cristalesHechizo para san valentin con cristales
Hechizo para san valentin con cristales
 
21st Century Socialism and Ecological Marxism _1_
21st Century Socialism and Ecological Marxism _1_21st Century Socialism and Ecological Marxism _1_
21st Century Socialism and Ecological Marxism _1_
 

Semelhante a 6 function

C언어 세미나 - 함수
C언어 세미나 - 함수C언어 세미나 - 함수
C언어 세미나 - 함수SeungHyun Lee
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용유석 남
 
Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉HyunJoon Park
 
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
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)Sang Don Kim
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선daewon jeong
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Functionwonmin lee
 
불어오는 변화의 바람, 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 명신 김
 
14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿유석 남
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기 Yong Joon Moon
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
[Swift] Functions
[Swift] Functions[Swift] Functions
[Swift] FunctionsBill Kim
 

Semelhante a 6 function (20)

06장 함수
06장 함수06장 함수
06장 함수
 
C언어 세미나 - 함수
C언어 세미나 - 함수C언어 세미나 - 함수
C언어 세미나 - 함수
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용
 
Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉
 
C++에서 Objective-C까지
C++에서 Objective-C까지C++에서 Objective-C까지
C++에서 Objective-C까지
 
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
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Function
 
불어오는 변화의 바람, 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
 
14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
Java stream v0.1
Java stream v0.1Java stream v0.1
Java stream v0.1
 
Java stream v0.1
Java stream v0.1Java stream v0.1
Java stream v0.1
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
[Swift] Functions
[Swift] Functions[Swift] Functions
[Swift] Functions
 

Mais de 웅식 전

15 3. modulization
15 3. modulization15 3. modulization
15 3. modulization웅식 전
 
15 2. arguement passing to main
15 2. arguement passing to main15 2. arguement passing to main
15 2. arguement passing to main웅식 전
 
12 2. dynamic allocation
12 2. dynamic allocation12 2. dynamic allocation
12 2. dynamic allocation웅식 전
 
12 1. multi-dimensional array
12 1. multi-dimensional array12 1. multi-dimensional array
12 1. multi-dimensional array웅식 전
 
11. array & pointer
11. array & pointer11. array & pointer
11. array & pointer웅식 전
 
10. pointer & function
10. pointer & function10. pointer & function
10. pointer & function웅식 전
 
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class7. variable scope rule,-storage_class
7. variable scope rule,-storage_class웅식 전
 
5 2. string processing
5 2. string processing5 2. string processing
5 2. string processing웅식 전
 
5 1. character processing
5 1. character processing5 1. character processing
5 1. character processing웅식 전
 
15 1. enumeration, typedef
15 1. enumeration, typedef15 1. enumeration, typedef
15 1. enumeration, typedef웅식 전
 
3 2. if statement
3 2. if statement3 2. if statement
3 2. if statement웅식 전
 
3 1. preprocessor, math, stdlib
3 1. preprocessor, math, stdlib3 1. preprocessor, math, stdlib
3 1. preprocessor, math, stdlib웅식 전
 
2 3. standard io
2 3. standard io2 3. standard io
2 3. standard io웅식 전
 
2 2. operators
2 2. operators2 2. operators
2 2. operators웅식 전
 
2 1. variables & data types
2 1. variables & data types2 1. variables & data types
2 1. variables & data types웅식 전
 

Mais de 웅식 전 (20)

15 3. modulization
15 3. modulization15 3. modulization
15 3. modulization
 
15 2. arguement passing to main
15 2. arguement passing to main15 2. arguement passing to main
15 2. arguement passing to main
 
14. fiile io
14. fiile io14. fiile io
14. fiile io
 
13. structure
13. structure13. structure
13. structure
 
12 2. dynamic allocation
12 2. dynamic allocation12 2. dynamic allocation
12 2. dynamic allocation
 
12 1. multi-dimensional array
12 1. multi-dimensional array12 1. multi-dimensional array
12 1. multi-dimensional array
 
11. array & pointer
11. array & pointer11. array & pointer
11. array & pointer
 
10. pointer & function
10. pointer & function10. pointer & function
10. pointer & function
 
9. pointer
9. pointer9. pointer
9. pointer
 
7. variable scope rule,-storage_class
7. variable scope rule,-storage_class7. variable scope rule,-storage_class
7. variable scope rule,-storage_class
 
6. function
6. function6. function
6. function
 
5 2. string processing
5 2. string processing5 2. string processing
5 2. string processing
 
5 1. character processing
5 1. character processing5 1. character processing
5 1. character processing
 
15 1. enumeration, typedef
15 1. enumeration, typedef15 1. enumeration, typedef
15 1. enumeration, typedef
 
4. loop
4. loop4. loop
4. loop
 
3 2. if statement
3 2. if statement3 2. if statement
3 2. if statement
 
3 1. preprocessor, math, stdlib
3 1. preprocessor, math, stdlib3 1. preprocessor, math, stdlib
3 1. preprocessor, math, stdlib
 
2 3. standard io
2 3. standard io2 3. standard io
2 3. standard io
 
2 2. operators
2 2. operators2 2. operators
2 2. operators
 
2 1. variables & data types
2 1. variables & data types2 1. variables & data types
2 1. variables & data types
 

6 function

  • 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. 문제 : 여러 과목의 점수를 모두 합한 총점을 구하는 사용자 정의함수를 작성하자 사용자 정의 함수 – 함수 프로토타입 정하기!!! 1) 함수 입력 값  여러 과목의 점수 들  변수로 입력 하려면 정확히 과목에 따라 매개변수로 전달해야 함  배열로 처리하면 과목별 이름을 부여하지 않아도 됨!!!  정수 배열 또는 배정도형 배열 (정수로 정의해 보자!!)  과목 수  배열로 과목 점수를 함수에 입력하는 경우 과목 수를 알아야 배열 의 크기를 알 수 있다.  정수형 2) 함수 결과  함수를 정상적으로 실행한 경우 결과값인 총점  정수형  함수를 비정상적으로 실행한 경우 오류를 나타내기 위해 -1을 리턴  정수형 3) 함수 이름  TotalCalculation으로 하자. int TotalCalculation (int score[], int num); 소스 6-2 (config.h) 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. 문제 : 여러 과목의 점수를 모두 합한 총점을 구하는 사용자 정의함수를 작성하자 사용자 정의 함수 – 함수 호출하기!!! 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; 소스 6-7 (ch06_02_main.cpp) 12/32
  • 13. 헤더파일 작성에서 전처리기 사용 • 전처리기 (preprocessor) • 컴파일 전에 처리하기 • ‘#’ 기호로 시작함 #define : 기호상수 정의하기 #ifdef~ ① #else ② #endif : ifdef 이후 지정한 기호상수가 정의되 어 있으면 ①을 실행, 아니면 ②를 실행 #define //기호상수 정의 #ifdef ~#else~#endif //지정한 기호상수가 정의되어 있다면~ #ifndef~#else~#endif //지정한 기호상수가 정의되어 있지 않다면~ 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