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

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

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

설계란 무엇인가?

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

Microsoft PowerPoint - Chapter 1-rev

슬라이드 1

PowerPoint Template

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

쉽게 풀어쓴 C 프로그래밍

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

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

11장 포인터

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

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - chap06-2pointer.ppt

설계란 무엇인가?

C++ Programming

PowerPoint 프레젠테이션

untitled

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

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

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

Microsoft PowerPoint - C++ 5 .pptx

설계란 무엇인가?

슬라이드 1

Microsoft PowerPoint - ch07 - 포인터 pm0415

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

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

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

KNK_C_05_Pointers_Arrays_structures_summary_v02

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - 제11장 포인터

설계란 무엇인가?

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

PowerPoint 프레젠테이션

02장.배열과 클래스

C++ Programming

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

OCW_C언어 기초

Microsoft PowerPoint - chap-11.pptx

1. 인라인함수 예 : x, y 값중최소값을반환하는매크로와함수작성 // 매크로로구현한경우 #define MIN(X, Y) ((X) < (Y)? (X) : (Y)) X, Y 각각을괄호 ( ) 안에넣는이유는? // 함수로구현한경우 cout << MIN(4, 5) << en

Microsoft PowerPoint - Chapter 6.ppt

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

PowerPoint 프레젠테이션

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

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

Microsoft PowerPoint - Chapter_08.pptx

11장 포인터

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

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

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

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

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

Microsoft PowerPoint - chap12-고급기능.pptx

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

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

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Slide 1

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

C프로-3장c03逞풚

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

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

Lab 3. 실습문제 (Single linked list)_해답.hwp

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

C++ Programming

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

PowerPoint 프레젠테이션

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

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Microsoft PowerPoint - Chapter_04.pptx

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

PowerPoint Presentation

Data Structure

Microsoft PowerPoint - Chapter8.pptx

C 프로그램의 기본

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

Microsoft PowerPoint - chap-03.pptx

8장. 포인터

쉽게 풀어쓴 C 프로그래밍

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

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

Microsoft PowerPoint - Lesson2.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

C 프로그래밊 개요

PowerPoint Template

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

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

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

쉽게 풀어쓴 C 프로그래밍

C++ Programming

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

Microsoft PowerPoint - chap06-8.ppt

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

Microsoft PowerPoint - 05-chap03-ArrayAndPointer.ppt

Transcription:

2 장더나은 C 로서의 C++ (1) 표준입출력네임스페이스 ( 고전 C++ 와표준 C++) 함수오버로딩디폴트매개변수 new와 delete bool 자료형 C++ is not C C++ 프로그래밍입문

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, double, 문자열입력 : "); scanf("%d %lf %s", &ivar, &dvar, str); cstdio :?? VC++ 6.0의경우삭제 à 2.2 네임스페이스참고주소전달 printf("int 값 : %d\n", ivar); printf("double 값 : %f\n", dvar); printf(" 문자열 : %s\n", str); 2 장더나은 C 로서의 C++ (1) 1

1. 표준입출력 : cin, cout 의사용 C++ 의표준입출력방법 cin : 표준입력객체, >> 연산자와함께사용 cout : 표준출력객체, << 연산자와함께사용 예 : cout // cin, cout 표준입출력포함 // 반드시들어가야함 int ivar = 55; double dvar = 1.11; char str[20] = "C++"; 연속적인 << 사용가능더이상타입에신경쓰지않아도됨! cout << ivar << endl; // 표준출력연산자 << 사용 cout << dvar << endl << str << endl; endl à \n 과동일. 바꾸어수행해보라. 2 장더나은 C 로서의 C++ (1) 2

1. 표준입출력 : cin, cout 의사용 예 : cin, cout 의사용 int ivar; double dvar; char str[20]; 문자열입력 : 공백문자로구분줄단위입력 à 11 장 cout << "int, double, 문자열값입력 : "; cin >> ivar >> dvar; // 표준입력연산자 >> 사용 cin >> str; 연속적인 >> 사용가능 cout << "int 값 : " << ivar << endl; 더이상타입에신경쓰지않아도됨! cout << "double 값 : " << dvar << endl; cout << " 문자열 : " << str << endl; 2 장더나은 C 로서의 C++ (1) 3

2. 네임스페이스 다음시나리오의문제점은? 프로그래머A와프로그래머B가만든라이브러리를사용하여프로그램을작성하고자한다. 문제점 : 이름 ( 함수명, 변수명등 ) 의충돌가능성이있음 해결방안 : 네임스페이스 ( 이름공간 ) sum 함수는 LibA 의 sum 인가, LibB 의 sum 인가? 2 장더나은 C 로서의 C++ (1) 4

2. 네임스페이스 네임스페이스 : 식별자들에대한그룹 예 : Microsoft, Samsung 네임스페이스작성 using Microsoft namespace 네임스페이스 std; namespace Microsoft int g_mvar; int Plus(int x, int y) return (x + y); int Minus(int x, int y) return (x - y); Samsung 네임스페이스 namespace Samsung int g_svar; int Plus(int x, int y) 둘다 Plus, Minus 존재 return (x + y); int Minus(int x, int y); int Samsung::Minus(int x, int y) return (x - y); 함수의외부정의 :: 사용 네임스페이스이름을통해구별 Microsoft::g_MVar = Microsoft::Minus(5, 2); cout << Microsoft::g_MVar << endl; 2 장더나은 C 로서의 C++ (1) 5

2. 네임스페이스 전역네임스페이스 어떤네임스페이스에도포함되어있지않는영역 예 : 전역네임스페이스에 Sum 함수가있는경우 Sum(3, 4) 또는 ::Sum(3, 4) 특정네임스페이스에포함되어있는식별자를전역네임스페이스 ( 또는다른네임스페이스 ) 에있는것처럼사용하는방법 using Microsoft::Minus; using Samsung::Plus; 특정네임스페이스에포함되어있는모든식별자를전역네임스페이스에있는것처럼사용하는방법 using namespace Microsoft; using namespace Samsung; 단, 중복선언되어있는식별자의경우여전히해당네임스페이스명을붙여야함! 2 장더나은 C 로서의 C++ (1) 6

2. 네임스페이스 : 고전 C++ 와표준 C++ 고전 C++ : 네임스페이스의개념이없음 #include <iostream.h> cout << " 고전 C++" << endl; // 고전 C++ 헤더파일 표준 C++ : library 의모든식별자 à std 네임스페이스 using std::cout; using std::endl; VC++ 6.0 지원함 VC++ 8.0 지원하지않음 cout << " 표준 C++" << endl; // std::cout << " 표준 C++" << std::endl; // using 선언이없을경우 모든식별자사용가능! 표준 C++ 의헤더파일 VC++ 6.0, 8.0 모두지원 2 장더나은 C 로서의 C++ (1) 7

2. 네임스페이스 : 고전 C++ 와표준 C++ 기존 C 함수의사용 ß 실제로 C 라이브러리를사용함 #include <stdio.h> printf("c++ Programming"); 다음과같이대체가능 #include <cstdio> 원리 cstdio 파일은다음과같이 stdio.h 를 include 하고있으며, stdio.h 내의모든식별자를 std 네임스페이스로포함시키고있음 using 선언이란특정네임스페이스의식별자를다른네임스페이스에위치시키는것! 모든 C 라이브러리들이이와같은방식으로사용되고있음 주의 : VC++ 6.0 의경우 cstdio 파일에는단순히 #include <stdio.h> 만기술되어있음따라서, std 에포함되지않으며 using 사용불가 // cstdio 파일 #include <stdio.h> namespace std using ::printf; using ::scanf; using ::fread; using ::fwrite; using ::FILE:... // 생략 전역에있는 printf 를 std 네임스페이스에포함시킴 2 장더나은 C 로서의 C++ (1) 8

2. 네임스페이스 : 중첩네임스페이스 예 : CompanyA 네임스페이스내에 DeptC 라는네임스페이스선언 namespace CompanyA // 네임스페이스 CompanyA 작성 int g_vara; void func1() cout << "ComapanyA::func1" << endl; void func2() cout << "ComapanyA::func2" << endl; namespace CompanyB // 네임스페이스 CompanyB 작성 using namespace CompanyA; // 네임스페이스 CompanyA를 CompanyB로포함 int g_varb; void func1() cout << "ComapanyB::func1" << endl; namespace DeptC // CompanyB 내에네임스페이스 DeptC 작성 void func1() cout << "CompanyB::DeptC::func1" << endl; CompanyB::func1(); CompanyB::func2(); CompanyB::DeptC::func1(); // 실제로는 CompanyA 의 func2 함수실행 2 장더나은 C 로서의 C++ (1) 9

3. 함수오버로딩 예 : 다음프로그램의문제점은? void swap(int *x, int *y) int temp = *x; *x = *y; *y = temp; int a = 3, b = 4; double c = 1.1, d = 2.2; swap(&a, &b); swap(&c, &d); // 실매개변수 2 개의값교환 컴파일에러 : double * à int * 묵시적형변환불가 swap((int *) &c, (int *) &d) 로변경한다면? 논리적에러 : 소수점이하처리불가해결책 : int, double 형별도의 swap 함수작성! cout << "a = " << a << ", b = " << b << endl; cout << "c = " << c << ", d = " << d << endl; 2 장더나은 C 로서의 C++ (1) 10

3. 함수오버로딩 swap 함수의수정 void swapi(int *x, int *y) int temp = *x; *x = *y; *y = temp; // int 형값 2 개교환 void swapd(double *x, double *y) double temp = *x; *x = *y; *y = temp; 문제점 : 호출하는곳에서도 swapi(&a, &b); swapd(&c, &d); 로변경 * 동일한함수명사용가능 à 함수오버로딩 // double 형값 2 개교환 void swap(int *x, int *y) int temp = *x; *x = *y; *y = temp; void swap(double *x, double *y) double temp = *x; *x = *y; *y = temp; 2 장더나은 C 로서의 C++ (1) 11

3. 함수오버로딩 함수오버로딩의조건 함수명또는매개변수 ( 개수또는타입 ) 가달라야함 반환형은무관 int func(int n); char func(int n); // 오버로딩불가능 함수오버로딩시모호성주의 char square(char c) return (c * c); long square(long val) return (val * val); cout << square(3) << endl; // char 값제곱 // long 값제곱 컴파일에러발생 // 3(int) 은 char, long 둘다로형변환가능 2 장더나은 C 로서의 C++ (1) 12

4. 디폴트매개변수 예 : x 의 y 승을구하는 power 함수작성. 단, 두번째매개변수 y 가전달되지않으면 x 의 2 승을반환 함수오버로딩을통해작성가능 int power(int x) return (x * x); int power(int x, int y) int i; int result = 1; for (i = 0; i < y; i++) result *= x; return result; // x 의 2 승 // x 의 y 승 디폴트매개변수를사용한다면하나의함수로작성끝! int power(int x, int y = 2) int i; int result = 1; for (i = 0; i < y; i++) result *= x; return result; cout << power(3) << endl; // 3의 2승 cout << power(3, 3) << endl; // 3의 3승 2 장더나은 C 로서의 C++ (1) 13

4. 디폴트매개변수 디폴트매개변수의복잡한사용예 int power(int a, int b); int f(int x, int y = power(3, 4)); // 디폴트값 : 함수호출가능주의사항 디폴트매개변수값은뒤에서부터줄수있음 즉, 함수호출시마지막값부터역순으로생략가능 int f(int a, int b = 3, int c = 5); f(5); // O int g(int a, int b = 3, int c); g(1,, 3); // X 디폴트매개변수값은함수프로토타입또는정의둘중하나에만기술 à 일반적으로프로토타입에기술 int f(int a = 3); int f(int a = 3) return a; // X 함수오버로딩과함께사용할경우모호성주의 int power(int x, int y = 2); int power(int x); power(3); // 둘다호출가능, 어떤함수? 2 장더나은 C 로서의 C++ (1) 14

5. new 와 delete C malloc과 free를사용한동적할당및해제 int *p1 = (int *) malloc(sizeof(int)); free(p1); int *p2 = (int *) malloc(sizeof(int) *3); free(p1); C++ malloc, free 사용가능 new, delete 연산자사용 malloc, free 보다편리 int *p1 = new int; delete p1; int *p2 = new int[3]; delete [] p2; // 배열메모리해제 메모리할당과동시에초기화가능 int *p1 = new int(100); // 배열의경우초기화불가능 2 장더나은 C 로서의 C++ (1) 15

5. new 와 delete 예 : int 형변수하나의동적할당및초기화 int *p = new int(100); // int 형변수동적할당및 100 으로초기화 cout << " 포인터변수의주소 : " << &p << endl; cout << " 포인터변수의값 : " << p << endl; cout << " 동적변수의값 : " << *p << endl; delete p; 2 장더나은 C 로서의 C++ (1) 16

5. new 와 delete 예 : 배열의동적할당 int i; int *p = new int[5]; for (i = 0; i < 5; i++) p[i] = i; // int 형변수 5 개동적할당 // 포인터를통해배열처럼사용 for (i = 0; i < 5; i++) cout << p[i] << " "; cout << endl; delete [] p; // 배열동적할당시해제 2 장더나은 C 로서의 C++ (1) 17

5. new 와 delete 예 : 2 차원배열의동적할당 int형포인터에대한포인터 int **p; p[0],, p[3] 이 int형포인터 int i, j; p = new int *[4]; for (i = 0; i < 4; i++) p[i] = new int[5]; for (i = 0; i < 4; i++) for (j = 0; j < 5; j++) p[i][j] = i + j; 2차원배열처럼사용 각포인터에대해 int 형 5 개배열생성 for (i = 0; i < 4; i++) for (j = 0; j < 5; j++) cout << p[i][j] << "\t"; cout << endl; for (i = 0; i < 4; i++) delete [] p[i]; delete [] p; 2 장더나은 C 로서의 C++ (1) 18 동적메모리해제

6. bool 자료형 C 스타일의 bool 자료형 typedef을통해참, 거짓을표시하는타입선언, 내부적으론 int형 typedef int BOOL; C++ : bool 형도입 값 : true, false 수식연산에사용가능 true à 1, false à 0 다른타입의값을 bool형으로자동형변환가능 0 à false, 그외 à true ü bool tf1 = true; ü int a = 1 tf1 // a는 0이됨 ü bool tf2 = a; // tf2는 false가됨 2 장더나은 C 로서의 C++ (1) 19

6. bool 자료형 예 : C, C++ 의비교 typedef int BOOL; C 스타일 BOOL bvar1 = 3; bool bvar2 = 3; cout << "bvar1 : " << bvar1 << endl; cout << "bvar2 : " << bvar2 << endl; int a = bvar1 + 2; int b = bvar2 + 2; // BOOL은 int형으로취급됨 // bool은 true, false로취급됨 cout << "a : " << a << endl; cout << "b : " << b << endl; 2 장더나은 C 로서의 C++ (1) 20

7. C++ is not C C 와 C++ 사이의차이 ( 몇가지예 ) 1. void 포인터와다른타입의포인터사이의자동형변환 2. 지역변수의선언위치 3. 함수프로토타입에서매개변수가없는경우의해석 4. 구조체변수의선언방법 1. void 포인터 ßà 다른타입의포인터자동형변환 C에서는가능 : 자동형변환 O int *p = malloc(sizeof(int) * 3); // (void *) 반환, C++ 자동형변환 X free(p); int *p = (int *) malloc(sizeof(int) * 3); 2 장더나은 C 로서의 C++ (1) 21

7. C++ is not C 2. 지역변수의선언위치 C : 다른문장이나오기이전 C++ : 중간에도선언가능 int i = 5; int Sum; Sum = 0; C++ : for 문에서도선언가능, 두개의 i 는서로다른변수 for (int i = 1; i <= 100; i++) // i는 for 블록내에서만사용가능 Sum += i; cout << "i : " << i << endl; cout << " 합계 : " << Sum << endl; 주의 : VC++ 6.0 에서는 for 문에서선언한변수를그이후에계속사용가능 à 컴파일에러발생 à 두개의 i 를같은변수로봄 à 표준 C++ 의개념에맞지않음 2 장더나은 C 로서의 C++ (1) 22

7. C++ is not C 3. 함수의매개변수가없는경우의해석 C : 해당함수호출시실매개변수의개수, 타입을검사하지않음 à 실매개변수에관계없이호출가능 ( 실매개변수무시 ) C++ : void로간주 void f(); // void f(void); 와동일 #include <stdio.h> void f() printf("test\n"); f(3.5); f(3); f('a'); f(1, 2); // 매개변수를지정하지않은경우 C 에서는수행가능 C++ 에서는수행불가능! f 함수호출시실매개변수가없어야함 2 장더나은 C 로서의 C++ (1) 23

7. C++ is not C 4. 구조체변수의선언방법 C : struct Point P1; // struct 반드시동반 C++ : struct Point P1; Point P1; // struct 없이도가능 struct Point int x, y; ; C에서는에러발생 Point P1 = 1, 2 ; // struct를포함하지않고변수선언 C, C++ 모두끊임없이진화 : 서로의장점참고 2 장더나은 C 로서의 C++ (1) 24