35
프프프프프 프프프 C 프프 프프 C++ I

프로그래밍 세미나

Embed Size (px)

DESCRIPTION

프로그래밍 세미나. C 보다 나은 C++ I. C 보다 나은 C++ I. C 와 C++ 의 차이점 소스 파일의 확장자. CFile.c. C++File.cpp. C 컴파 일. C++ 컴파 일. CFile.obj. C++File.obj. 소스 파일의 확장자. C 보다 나은 C++ I. C 와 C++ 의 차이점 입력과 출력 함수의 변화. C 보다 나은 C++ I. C 와 C++ 의 차이점 입력과 출력 함수의 변화 출력 함수 : cout

Citation preview

Page 1: 프로그래밍 세미나

프로그래밍 세미나C 보다 나은 C++ I

Page 2: 프로그래밍 세미나

C 보다 나은 C++ I

C 와 C++ 의 차이점 소스 파일의 확장자

CFile.c C++File.cpp

CFile.obj C++File.obj

C 컴파일

C++ 컴파일

소스 파일의 확장자

Page 3: 프로그래밍 세미나

C 보다 나은 C++ I

C 와 C++ 의 차이점 입력과 출력 함수의 변화

Page 4: 프로그래밍 세미나

C 보다 나은 C++ I

C 와 C++ 의 차이점 입력과 출력 함수의 변화

출력 함수 : cout << 값 ; 입력 함수 : cin >> 값 ;

using namespace std; 를 선언하지 않으면 ? 기본 사용 함수 앞에 std:: 를 붙여야 한다 .

ex) std::cout, std::cin

#include <iostream>using namespace std; 선

Page 5: 프로그래밍 세미나

C 보다 나은 C++ I

C 와 C++ 의 차이점 입력과 출력 함수의 기본적인 사용

형식 1

형식 2

cout << 값 ;

cout << 값 1 << 값 2 << 값 3;

형식 1

형식 2

cin >> 변수명 ;

cin >> 변수 1 >> 변수 2 >> 변수 3;

Page 6: 프로그래밍 세미나

C 보다 나은 C++ I

C 방식의 참 , 거짓 0 은 거짓 (false), 1 은 참 (true)

C++ 방식의 참 거짓 기본적으로 TRUE 와 FALSE 가 키워드로 제공

#define TRUE 1#define FALSE 0

int Equal1 = TRUE;int Equal2 = FALSE;

Page 7: 프로그래밍 세미나

C 보다 나은 C++ I

예제 1-1

Page 8: 프로그래밍 세미나

C 보다 나은 C++ I

예제 1-1

Page 9: 프로그래밍 세미나

C 보다 나은 C++ I

레퍼런스 (reference) 다른 변수의 별명 특정 변수에 별명을 만들어 그 이름으로 접근하는 것이 가능 레퍼런스 수식어인 & 를 레퍼런스에 지정 레퍼런스의 데이터형은 참조하는 변수의 데이터형과

동일해야 함

int & ref = num;

레퍼런스 수식어

레퍼런스 변수

다른 변수

ref 는 num 의 별명

Page 10: 프로그래밍 세미나

C 보다 나은 C++ I

예제 1-2

Page 11: 프로그래밍 세미나

C 보다 나은 C++ I

예제 1-2

Page 12: 프로그래밍 세미나

C 보다 나은 C++ I

레퍼런스 (reference) 다른 변수에 대한 이름만 존재할 뿐 메모리는 할당되지 않음 레퍼런스의 주소를 구하면 참조 변수의 주소가 구해짐

10ref num

Page 13: 프로그래밍 세미나

C 보다 나은 C++ I

예제 1-3

Page 14: 프로그래밍 세미나

C 보다 나은 C++ I

예제 1-3

Page 15: 프로그래밍 세미나

C 보다 나은 C++ I

레퍼런스 사용 시 주의사항 레퍼런스는 선언 시 반드시 초기화되어야 한다 레퍼런스의 데이터형은 참조하는 변수의 데이터형과

일치해야 한다 레퍼런스가 참조하는 대상을 바꿀 수 없다

int &ref1; // 초기화하지 않았으므로 컴파일 에러int &ref2 = 100; // 상수로 초기화했으므로 컴파일 에러

int num = 100;double &ref3 = num // 레퍼런스형이 잘못되었으므로 컴파일 에러

int x = 10, y = 20;int &ref4 = x; // ref4 는 x 의 별명ref4 = y; // x = y; 의 의미

Page 16: 프로그래밍 세미나

C 보다 나은 C++ I

레퍼런스에 의한 함수 인자 전달 함수의 인자 전달 방법

값에 의한 전달 (call-by-value) 포인터에 의한 전달 (call-by-pointer) 레퍼런스에 의한 전달 (call-by-reference)

Page 17: 프로그래밍 세미나

C 보다 나은 C++ I

예제 1-4

Page 18: 프로그래밍 세미나

C 보다 나은 C++ I

예제 1-4

Page 19: 프로그래밍 세미나

C 보다 나은 C++ I

레퍼런스에 의한 함수 인자 전달 포인터에 의한 전달 (call-by-pointer)

void main(){ … … Swap( &a , &b ); … …}

void Swap( int *x , int *y ){ int temp = *x; *x = *y; *y = temp;}

int *x = &a;

int *y = &b;

Page 20: 프로그래밍 세미나

C 보다 나은 C++ I

예제 1-4

Page 21: 프로그래밍 세미나

C 보다 나은 C++ I

예제 1-4

Page 22: 프로그래밍 세미나

C 보다 나은 C++ I

레퍼런스에 의한 함수 인자 전달 레퍼런스에 의한 전달 (call-by-reference)

void main(){ … … Swap( a , b ); … …}

void Swap( int &x , int &y ){ int temp = x; x = y; y = temp;}

int &x = a; int &y = y;

Page 23: 프로그래밍 세미나

C 보다 나은 C++ I

const 레퍼런스 const 키워드를 함께 사용하면 레퍼런스가 참조하는 값 변경

불가 읽기 전용의 접근 ( read-only access) 만 가능

int data = 100;const int &ref = data;cout << ref; // cout << data; 의 의미ref = 200; // const 레퍼런스는 변경할 수 없으므로 컴파일 에러data = 200; // data 를 직접 변경하는 것은 가능하다 .

Page 24: 프로그래밍 세미나

C 보다 나은 C++ I

연습문제

Page 25: 프로그래밍 세미나

C 보다 나은 C++ I

연습문제

return 값이 있으므로void 형이 아닌 dou-ble 형

Page 26: 프로그래밍 세미나

C 보다 나은 C++ I

디폴트 인자 함수를 호출할 때 인자를 생략하면 디폴트 값이 자동적으로 사용 디폴트 인자를 지정할 때는 함수의 선언에 지정

void foo ( char c, int i, double d = 0.5 );

디폴트 인자

Page 27: 프로그래밍 세미나

C 보다 나은 C++ I

디폴트 인자 함수를 호출할 때 인자를 생략하면 디폴트 값이 자동적으로 사용 디폴트 인자를 지정할 때는 함수의 선언에 지정

void foo(char c = ‘A’, int i = 10, double d = 0.5);void main(){ foo(); foo(‘B’); foo(‘C’, 20); foo(‘D’, 30, 1.0); }

// foo(‘A’, 10, 0.5); 이 호출된다 .// foo(‘B’, 10, 0.5); 이 호출된다 .// foo(‘C’, 20, 0.5); 이 호출된다 .// foo(‘D’, 30, 1.0); 이 호출된다 .

Page 28: 프로그래밍 세미나

C 보다 나은 C++ I

예제 1-5

Page 29: 프로그래밍 세미나

C 보다 나은 C++ I

예제 1-5

Page 30: 프로그래밍 세미나

C 보다 나은 C++ I

예제 1-5 enum – 열거형

cout.setf(ios::showbase); cout 객체의 멤버 함수인 setf 는 출력에 대한 플래그를 설정 정수를 출력할 때 진법 정보를 함께 출력하는 기능 10 을 10 진수 = 10 10 을 8 진수 = 012 10 을 16 진수 = 0xa

cout.width(5); 출력할 값의 폭을 설정하는 기능

0 1 2

Page 31: 프로그래밍 세미나

C 보다 나은 C++ I

디폴트 인자 사용 규칙 함수의 가장 오른쪽 인자부터 지정해야 한다 .

함수의 가장 오른쪽 인자부터 생략해야 한다 .

void foo(char c, int i, double);void foo(char c, int i, double d = 0.5);void foo(char c, int i = 10, double d = 0.5);void foo(char c = ‘A’, int i = 10, double d = 0.5);

void foo(char c = ‘A’, int i = 10, double d = 0.5);foo(‘A’, 20); // 세 번째 인자만 생략함foo(‘B’); // 두 번째 , 세 번째 인자만 생략함foo(); // 인자 모두를 생략함

Page 32: 프로그래밍 세미나

C 보다 나은 C++ I

함수 오버로딩 이름은 같지만 인자의 개수나 데이터 형이 다른 함수를 여러

번 정의하는 기능

Page 33: 프로그래밍 세미나

C 보다 나은 C++ I

함수 오버로딩 시 주의 사항 함수를 오버로딩 할 때 인자의 개수가 서로 다르거나 인자의

데이터 형이 서로 달라야 한다 .

인자의 이름만 다른 경우 인자의 시그니처 ( 인자의 개수와 데이터형 ) 은 같고 인자의 이름만

다른 경우에는 함수 오버로딩을 할 수 없다 .

int fool(int a, int b);int fool(int x, int y);fool(10, 20);

Page 34: 프로그래밍 세미나

C 보다 나은 C++ I

함수 오버로딩 시 주의 사항 함수의 리턴형만 다른 경우

인자의 시그니처 ( 인자의 개수와 데이터형 ) 은 같고 리턴형만 다른 경우에는 함수 오버로딩을 할 수 없다 .

int foo2(char c, int num);void foo2(char c, int num);fool2(‘A’, 20);

Page 35: 프로그래밍 세미나

C 보다 나은 C++ I

함수 오버로딩 시 주의 사항 데이터 형과 해당 형의 레퍼런스 형으로 오버로딩 된 경우

인자의 데이터 형이 특정 데이터 형과 그의 레퍼런스 형인 경우에는 함수 오버로딩을 할 수 없다 .

int foo3(int a, int b);int foo3(int &a, int &b);int x = 10, y = 20;foo3(x, y);