Microsoft PowerPoint - Chapter 1-rev

Similar documents
Microsoft PowerPoint - additional01.ppt [호환 모드]

PowerPoint Template

Microsoft PowerPoint - [2009] 02.pptx

프입2-강의노트-C++기초

Microsoft PowerPoint - Chapter 6.ppt

쉽게 풀어쓴 C 프로그래밍

금오공대 컴퓨터공학전공 강의자료

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

PowerPoint Template

C++ Programming

C프로-3장c03逞풚

Microsoft PowerPoint - 05장(함수) [호환 모드]

설계란 무엇인가?

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - additional06.ppt [호환 모드]

슬라이드 1

Microsoft PowerPoint - C++ 5 .pptx

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

슬라이드 1

C++ Programming

Microsoft PowerPoint - Chapter 10.ppt

Microsoft PowerPoint - additional03.ppt [호환 모드]

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - additional08.ppt [호환 모드]

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

02장.배열과 클래스

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

Microsoft PowerPoint - chap12-고급기능.pptx

untitled

Microsoft PowerPoint - chap10-함수의활용.pptx

쉽게 풀어쓴 C 프로그래밍

K&R2 Reference Manual 번역본

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint Template

Microsoft PowerPoint - additional-11_13l.ppt [호환 모드]

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

윤성우의 열혈 TCP/IP 소켓 프로그래밍

설계란 무엇인가?

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

C++ Programming

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

Microsoft PowerPoint - Chapter8.pptx

Microsoft PowerPoint - chap06-2pointer.ppt

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

untitled

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Visual C++ & OOP Fundamentals ( 2005/1/31~2005/2/4)

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap11-포인터의활용.pptx

설계란 무엇인가?

C++ Programming

PowerPoint Presentation

11장 포인터

C 언어 프로그래밊 과제 풀이

C++ Programming

OCW_C언어 기초

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Data Structure

03장.스택.key

PowerPoint 프레젠테이션

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

PowerPoint Presentation

C 프로그램의 기본

Microsoft PowerPoint - chap06-5 [호환 모드]

C++ Programming

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

윤성우의 열혈 TCP/IP 소켓 프로그래밍

설계란 무엇인가?

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

KNK_C_05_Pointers_Arrays_structures_summary_v02

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

Microsoft PowerPoint - additional07.ppt [호환 모드]

Slide 1

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - Chapter 4-rev

PowerPoint Presentation

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

Microsoft PowerPoint - 9ÀÏ°_ÂüÁ¶ÀÚ.ppt

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

윤성우의 열혈 TCP/IP 소켓 프로그래밍

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

12 장파일입출력 파일입출력의기초파일열기, 사용하기, 닫기파일입출력모드문자단위파일입출력텍스트파일과이진파일 read, write 함수에의한이진파일입출력임의접근입출력스트림상태입출력연산자오버로딩과파일입출력 C++ 프로그래밍입문

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

080629_CFP °ø°³¿ë.hwp

PowerPoint 프레젠테이션

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - ch 전처리기, 다중 소스파일 pm1015

쉽게 풀어쓴 C 프로그래밍

untitled

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap-03.pptx

프입2-강의노트-const-friend-static

Transcription:

1.C 기반의 C++ part 1 스트림입출력 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park

스트림입출력 Jong Hyuk Park

printf 와 scanf 출력의기본형태 : 과거스타일! iostream.h 헤더파일의포함 HelloWorld1.cpp 참조 cout << 출력대상 ; cout<< 출력대상 1<< 출력대상 2<< 출력대상 3; cout<<1<<'a'<<"string"<<endl; 3

printf 와 scanf 출력의기본형태 : 현재스타일! iostream 헤더파일의포함 HelloWorld2.cpp std::cout << 출력대상 ; S td::cout<< 출력대상 1<< 출력대상 2<< 출력대상 3; std::cout<<1<<'a'<<"string"<<std::endl; 4

printf 와 scanf 입력의기본형태 : 과거스타일! iostream.h 헤더파일의포함 SimpleAdder1.cpp, BetweenAdder.cpp cin>> 입력변수 ; cin>> 입력변수 1>> 입력변수 2>> 입력변수 3; cin>>val1; 5

printf 와 scanf 입력의기본형태 : 현재스타일! iostream 헤더파일의포함 SimpleAdder2.cpp std::cin>> 입력변수 ; std::cin>> 입력변수 1>> 입력변수 2>> 입력변수 3; std::cin>>val1; 6

입출력연산자 C++ 언어에서는스트림입출력연산자를사용하여표준입출력 스트림 (stream) 이란물리적인입출력장치를입출력이순서대로이루어지는가상의통로로정의 cin, cout, cerr로정의된예약어와 <<, >> 스트림연산자와함께사용 표준입력 #include <iostream.h> cin >> 변수 [ >> 변수 ]; 표준출력 #include <iostream.h> cout << 식 [ << 식 ]; 표준에러출력 #include <iostrem.h> cerr << 식 [ << 식 ]; 표준입력 #include <iostream> std::cin >> 변수 [ >> 변수 ]; 표준출력 #include <iostream> std::cout << 식 [ << 식 ]; 표준에러출력 #include <iostrem> std::cerr << 식 [ << 식 ]; 7

입출력예 #include <stdio.h> int main(void) int sum, i, n; scanf( %d, &n); sum = 0; for (i=1; i <= n; i++) sum += i; printf( sum = %d\n, sum); return 0; #include <iostream.h> int main(void) int sum, i, n; cin >> n; sum = 0; for (i=1; i <= n; i++) sum += i; cout << sum = << sum << endl; return 0; #include <iostream> int main(void) int sum, i, n; std::cin >> n; sum = 0; for (i=1; i <= n; i++) sum += i; std::cout << sum = << sum << endl; return 0; HW #1) p27, 문제 4 8

함수 Jong Hyuk Park

함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능 같은이름을갖는각함수는인수의형과갯수, 함수의반환형에의해구분 함수뿐만아니라연산자오버로딩도가능한데이에관한자세한소개는 10 장에서소개 10

함수오버로딩 (overloading) 함수이름의중복! 파일의확장자는.C 이다! 무엇이문제? int function(void) return 10; int function(int a, int b) return a+b; int main(void) function(); function(12, 13); return 0; 11

함수오버로딩 (overloading) 함수오버로딩이란? 동일한이름의함수를중복해서정의하는것! 함수오버로딩의조건 매개변수의개수혹은타입이일치하지않는다. 함수오버로딩이가능한이유 호출할함수를매개변수의정보까지참조해서호출 함수의이름 + 매개변수의정보 12

함수오버로딩 (overloading) 함수오버로딩의예 FunctionOverloading.cpp int function1(int n) int function1(char c) int function2(int v) int function2(int v1, int v2) 13

오버로딩예 // 절대값함수의중복정의 #include <iostream> int abs(int n); // 정수의절대값함수 double abs(double n); // double 형실수의절대값함수 int main(void) std::cout << "-123 절대값 : " << abs(-123) << '\n'; std::cout << "-12.345 절대값 : " << abs(-12.345) << '\n'; return 0; // 정수형인수의 abs() 함수 int abs(int n) return n < 0? -n : n; // double 정수형인수의 abs() 함수 double abs(double n) return n < 0? -n : n; -123 절대값 : 123-12.345 절대값 : 12.345 절대값을구하는 2 개의함수가모두같은이름의 abs() 로사용되었으나각함수는서로다른인수의형에따라구분된다. 14 HW #2) p33, 문제 1

디폴트매개변수 ( 인수 ) 디폴트매개변수란? 전달되지않은인자를대신하기위한기본값이설정되어있는변수 DefaultParameter1.cpp 15 그림 1-2

디폴트매개변수예 DefaultParameter2.cpp #include <iostream> int BoxVolume(int length, int width=1, int height=1); int main(void) std::cout<<"[3, 3, 3] : "<<BoxVolume(3, 3, 3)<<std::endl; std::cout<<"[5, 5, def] : "<<BoxVolume(5, 5)<<std::endl; std::cout<<"[7, def, def] : "<<BoxVolume(7)<<std::endl; return 0; int BoxVolume(int length, int width, int height) return length*width*height; [3, 3, 3] : 27 [5, 5, def] : 25 [7, def, def] : 7 16

디폴트매개변수 ( 인수 ) C++ 언어에서는함수선언시인수의디폴트 (default) 값을지정 디폴트값이지정된인수는함수호출시인수를생략 인수가생략된경우에는자동적으로디폴트값으로선언된값을인수로전달 인수의디폴트값의선언시디폴트값이선언된인수뒤에오는모든인수에대해서는디폴트값을지정해야함. 17

디폴트매개변수와함수오버로딩 #include<iostream> int function(int a=10) return a+1; int function(void) return 10; std::cout<<function()<<std::endl; int main(void) std::cout<<function(10)<<std::endl; return 0; 18

인 - 라인함수 (inline function) 인 - 라인함수를이용하여정의된함수를호출하면호출한함수로분기하여함수를실행한후복귀하는것이아니라호출한함수의내용을복사하여실행 C 언어의매크로정의함수를사용하는것과같은기능 매크로정의함수인경우인수의전달시부작용 (side effect) 을갖는데반하여확장함수는일반함수와같이부작용없이안전하게사용 인-라인함수는일반함수와같이함수로분기하여실행한후복귀하는과정이없이직접실행하므로일반함수보다프로그램의실행속도가빠름 함수를호출할때마다함수의내용이복사되므로프로그램의코드길이가길어진다는단점 일반적으로확장함수는코드의길이가짧은경우에주로사용 확장함수의정의는함수정의앞에 inline이란키워드를붙임 19

인라인 - 함수사용예 #include <iostream> #define SQUARE(x) ((x)*(x)) int main(void) std::cout<<square(5)<<std::endl; return 0; #include <iostream> inline int SQUARE(int x) return x*x; int main(void) std::cout<<square(5)<<std::end l; return 0; 20

이름공간 (namespace) Jong Hyuk Park

이름공간 (namespace) 이름공간 최근 C++ 에추가된기능으로변수, 함수이름등의영역지정기능 사용예 Lee와 Kim이두사람이독자적으로프로그램개발후통합하는예 두사람모두다른기능의foo() 함수정의 namespace으로이름공간정의, :: 으로이름공간표시 22 namespace Lee void foo() namespace Kim void foo() main() Kim::foo(); Lee::foo();

이름공간 (namespace) 23 이름공간이란? 공간에이름을주는행위! "202호에사는철수야 " #include <iostream> void function(void) std::cout<<"a.com 에서정의한함수 "<<std::endl; void function(void) std::cout<<"b.com 에서정의한함수 "<<std::endl; int main(void) function(); return 0;

이름공간 (namespace) #include <iostream> Namespace A_COM void function(void) std::cout<<"a.com 에서정의한함수 "<<std::endl; Namespace B_COM void function(void) std::cout<<"b.com 에서정의한함수 "<<std::endl; int main(void) A_COM::function(); B_COM::function() return 0; 24

이름공간 (namespace) 이름공간의적용 namespace1.cpp 그림 1-5 25 그림 1-4

이름공간 (namespace) 아하! std 란 namespace! 그림 1-6 26

이름공간 (namespace) 편의를위한 using 선언! using1.cpp, HelloWorld3.cpp using2.cpp, HelloWorld4.cpp using A_COM::function; using namespace A_COM; 27

이름공간 (namespace) 범위지정연산자기반전역변수접근 int val=100; int val=100; int main(void) int val=100; val+=1; return 0; int main(void) int val=100; ::val+=1; return 0; 28

표준라이브러리이름공간 C++ 컴파일러가제공하는표준라이브러리의함수, 변수, 클래스등은 std 이름공간영역으로지정 새 C++ 에서는.h 확장자생략하고이름공간명시 #include <iostream.h> main() cin >> data; cout << sum; #include <iostream> main() using std::cin; cin >> data; std::cout << sum; #include <iostream> using namespace std; main() cin >> data; cout << sum; 29

변수의범위지정연산자 C 언어에서는자동변수 ( 지역변수 ) 와외부변수 ( 전역변수 ) 가같은이름으로선언되어사용되었을때에는자동변수의값이참조 C++ 언어에서는이와같은경우변수앞에 :: 연산자를해당변수앞에기술하면외부변수를참조하는것이가능 30

범위지정연산자사용예 #include <iostream> using namespace std; int a = 88; int main(void) int a = 30; int a = 10; cout << "1-1 a = " << a << "\n"; // a = 10 참조 cout << "1-2 ::a = " << ::a << "\n"; // a = 88 참조 int a = 20; cout << "2-1 a = " << a << "\n"; // a = 20 참조 cout << "2-2 ::a = " << ::a << "\n"; // a = 88 참조 cout << "3-1 a = " << a << "\n"; // a = 30 참조 cout << "3-2 ::a = " << ::a << "\n"; // a = 88 참조 return 0; 31 1-1 a = 10 1-2 ::a = 88 2-1 a = 20 2-2 ::a = 88 3-1 a = 30 3-2 ::a = 88 :: 연산자는블럭의위치에관계없이외부변수를참조한다.

은행계좌관리프로그램 1-7 절 요구기능 계좌개설 : MakeAccount() 입금 : Deposit() 출금 : Withdraw() 전체고객잔액조회 : Inquire() 자료구조 typedef struct _Account int id; // 계좌번호 int balance; // 잔액 char name[20]; // 고객이름 Account; Account parray[100]; index=0; // 저장된 Account 수 32

은행계좌관리프로그램 1 #include <iostream> using namespace::std; const int NAME_LEN = 20; typedef struct _Account int id; int balance; char name[name_len]; Account; Account parray[100]; int index = 0; void PrintMenu(); void MakeAccount(); void Deposit(); void Withdraw(); void Inquire(); enummake = 1, DEPOSIT, WITHDRAW, INQUIRE, EXIT; int main(void) int choice; 33 while(1) PrintMenu(); cout<<" 선택 : "; cin>>choice; switch(choice) case MAKE : MakeAccount(); break; case DEPOSIT : Deposit(); break; case WITHDRAW : Withdraw(); break; case INQUIRE : Inquire(); break; case EXIT : return 0; default : cout<<" Illegal selection.." <<endl; break; return 0; void PrintMenu() // 메뉴출력 cout<<" ---Menu------ "<<endl; cout<<" 1. 계좌개설 "<<endl; cout<<" 2. 입금 "<<endl; cout<<" 3. 출금 "<<endl; cout<<" 4. 잔액조회 "<<endl; cout<<" 5. 프로그램종료 "<<endl;

은행계좌관리프로그램 2 void MakeAccount() // 계좌개설 int id; char name[name_len]; int balance; cout<<" 계좌개설 ------- "<<endl; cout<<" 계좌 ID : "; cin>>id; cout<<" 이름 : "; cin>>name; cout<<" 입금액 : "; cin>>balance; parray[index].id = id; parray[index].balance = balance; strcpy(parray[index].name, name); index++; void Deposit() // 입급 int money; int id; // 찾고자하는 ID cout<<" 계좌 ID : "; cin>>id; cout<<" 입금액 : "; cin>>money; for(int i = 0; i<index; i++) if(parray[i].id == id) parray[i].balance += money; cout<<" 입금완료 "<<endl; return; cout<<" 유효하지않은 ID입니다. "<<endl; 34 void Withdraw() // 출금 int money; int id; // 찾고자하는 ID cout<<" 계좌ID : "; cout<<" 출금액 : "; cin>>id; cin>>money; for(int i = 0; i<index; i++) if(parray[i].id == id) if(parray[i].balance < money) cout<<" 잔액부족 "<<endl; return; parray[i].balance -= money; cout<<" 출금완료 "<<endl; return; cout<<" 유효하지않은 ID 입니다."<<endl; void Inquire() // 전체고객의정보 ( 잔액 ) 조회 for(int i=0; i<index; i++) cout<<" 계좌 ID : "<<parray[i].id<<endl; cout<<" 이름 : "<<parray[i].name<<endl; cout<<" 자액 : "<<parray[i].balance<<endl;

Jong Hyuk Park