2_세미나_C보다_나은_C _I

Download Report

Transcript 2_세미나_C보다_나은_C _I

프로그래밍 세미
나
C보다 나은 C++ I
C보다 나은 C++ I

C와 C++의 차이점

소스 파일의 확장자
CFile.c
C++File.cpp
C 컴파
일
CFile.obj
C++ 컴파
일
C++File.obj
소스 파일의 확
장자
C보다 나은 C++ I

C와 C++의 차이점

입력과 출력 함수의 변화
C보다 나은 C++ I

C와 C++의 차이점

입력과 출력 함수의 변화
출력 함수 : cout << 값;
 입력 함수 : cin >> 값;


#include <iostream>
using namespace std;
선
언
using namespace std; 를 선언하지 않으면?

기본 사용 함수 앞에 std:: 를 붙여야 한다.
 ex) std::cout, std::cin
C보다 나은 C++ I

C와 C++의 차이점

입력과 출력 함수의 기본적인 사용
형식
1
cout << 값;
형식
2
cout << 값1 << 값2 << 값3;
형식
1
cin >> 변수명;
형식
2
cin >> 변수1 >> 변수2 >> 변
수3;
C보다 나은 C++ I

C 방식의 참, 거짓

0은 거짓(false), 1은 참(true)
#define TRUE
#define FALSE

1
0
C++ 방식의 참 거짓

기본적으로 TRUE와 FALSE가 키워드로 제공
int Equal1 = TRUE;
int Equal2 = FALSE;
C보다 나은 C++ I

예제 1-1
C보다 나은 C++ I

예제 1-1
C보다 나은 C++ I

레퍼런스(reference)
다른 변수의 별명
 특정 변수에 별명을 만들어 그 이름으로 접근하는 것이
가능
 레퍼런스 수식어인 & 를 레퍼런스에 지정
 레퍼런스의 데이터형은 참조하는 변수의 데이터형과 동
일해야 함

int
&
ref
레퍼런스
레퍼런스 수변수
식어
=
num;
다른 변
수
ref 는 num의 별
명
C보다 나은 C++ I

예제 1-2
C보다 나은 C++ I

예제 1-2
C보다 나은 C++ I

레퍼런스(reference)
다른 변수에 대한 이름만 존재할 뿐 메모리는 할당되지
않음
 레퍼런스의 주소를 구하면 참조 변수의 주소가 구해짐

ref
10
num
C보다 나은 C++ I

예제 1-3
C보다 나은 C++ I

예제 1-3
C보다 나은 C++ I

레퍼런스 사용 시 주의사항
레퍼런스는 선언 시 반드시 초기화되어야 한다
 레퍼런스의 데이터형은 참조하는 변수의 데이터형과 일
치해야 한다
 int
레퍼런스가
참조하는 대상을
바꿀 수
없다
&ref1;
// 초기화하지
않았으므로
컴파일 에

러
int &ref2 = 100;
러
// 상수로 초기화했으므로 컴파일 에
int num = 100;
double &ref3 = num
파일 에러
// 레퍼런스형이 잘못되었으므로 컴
int x = 10, y = 20;
int &ref4 = x;
ref4 = y;
// ref4는 x의 별명
// x = y; 의 의미
C보다 나은 C++ I

레퍼런스에 의한 함수 인자 전달

함수의 인자 전달 방법
값에 의한 전달(call-by-value)
 포인터에 의한 전달(call-by-pointer)
 레퍼런스에 의한 전달(call-by-reference)

C보다 나은 C++ I

예제 1-4
C보다 나은 C++ I

예제 1-4
C보다 나은 C++ I

레퍼런스에 의한 함수 인자 전달

포인터에 의한 전달(call-by-pointer)
void main()
{
……
Swap( &a
……
}
, &b
int *x = &a;
void Swap( int *x
{
int temp = *x;
*x = *y;
*y = temp;
}
);
int *y = &b;
, int *y )
C보다 나은 C++ I

예제 1-4
C보다 나은 C++ I

예제 1-4
C보다 나은 C++ I

레퍼런스에 의한 함수 인자 전달

레퍼런스에 의한 전달(call-by-reference)
void main()
{
……
Swap( a
……
}
int &x = a;
,
b
);
int &y = y;
void Swap( int &x , int &y )
{
int temp = x;
x = y;
y = temp;
}
C보다 나은 C++ I

const 레퍼런스
const 키워드를 함께 사용하면 레퍼런스가 참조하는 값
변경 불가
 읽기 전용의 접근( read-only access)만 가능

int data = 100;
const int &ref = data;
cout << ref;
ref = 200;
파일 에러
data = 200;
// cout << data; 의 의미
// const 레퍼런스는 변경할 수 없으므로 컴
// data를 직접 변경하는 것은 가능하다.
C보다 나은 C++ I

연습문제
C보다 나은 C++ I

연습문제
return 값이 있으므로
void형이 아닌 double
형
C보다 나은 C++ I

디폴트 인자
함수를 호출할 때 인자를 생략하면 디폴트 값이 자동적
으로 사용
 디폴트 인자를 지정할 때는 함수의 선언에 지정

void foo ( char c, int i, double d = 0.5 );
디폴트
인자
C보다 나은 C++ I

디폴트 인자
함수를 호출할 때 인자를 생략하면 디폴트 값이 자동적
으로 사용
 디폴트 인자를 지정할 때는 함수의 선언에 지정

void foo(char c = ‘A’, int i = 10, double d = 0.5);
void main()
{
// foo(‘A’, 10, 0.5); 이 호출
foo();
//
foo(‘B’, 10, 0.5); 이 호출
된다.
foo(‘B’);
// foo(‘C’, 20, 0.5); 이 호출
된다.
foo(‘C’, 20);
//된다.
foo(‘D’, 30, 1.0); 이 호출
foo(‘D’, 30, 1.0);
된다.
}
C보다 나은 C++ I

예제 1-5
C보다 나은 C++ I

예제 1-5
C보다 나은 C++ I

예제 1-5

enum – 열거형
0

cout.setf(ios::showbase);
1
2
cout 객체의 멤버 함수인 setf는 출력에 대한 플래그를 설정
 정수를 출력할 때 진법 정보를 함께 출력하는 기능
 10을 10진수 = 10
 10을 8진수 = 012
 10을 16진수 = 0xa


cout.width(5);

출력할 값의 폭을 설정하는 기능
C보다 나은 C++ I

디폴트 인자 사용 규칙

함수의 가장 오른쪽 인자부터 지정해야 한다.
void foo(char c,
void foo(char c,
void foo(char c,
void foo(char c = ‘A’,

int i,
int i,
int i = 10,
int i = 10,
double);
double d = 0.5);
double d = 0.5);
double d = 0.5);
함수의 가장 오른쪽 인자부터 생략해야 한다.
void foo(char c = ‘A’, int i = 10, double d = 0.5);
foo(‘A’, 20);
// 세 번째 인자만 생략함
foo(‘B’);
// 두 번째, 세 번째 인자만 생략함
foo();
// 인자 모두를 생략함
C보다 나은 C++ I

함수 오버로딩

이름은 같지만 인자의 개수나 데이터 형이 다른 함수를
여러 번 정의하는 기능
C보다 나은 C++ I

함수 오버로딩 시 주의 사항


함수를 오버로딩 할 때 인자의 개수가 서로 다르거나 인
자의 데이터 형이 서로 달라야 한다.
인자의 이름만 다른 경우

인자의 시그니처(인자의 개수와 데이터형)은 같고 인자의 이름
만 다른 경우에는 함수 오버로딩을 할 수 없다.
int fool(int a, int b);
int fool(int x, int y);
fool(10, 20);
C보다 나은 C++ I

함수 오버로딩 시 주의 사항

함수의 리턴형만 다른 경우

인자의 시그니처(인자의 개수와 데이터형)은 같고 리턴형만 다
른 경우에는 함수 오버로딩을 할 수 없다.
int foo2(char c, int num);
void foo2(char c, int num);
fool2(‘A’, 20);
C보다 나은 C++ I

함수 오버로딩 시 주의 사항

데이터 형과 해당 형의 레퍼런스 형으로 오버로딩 된 경
우
인자의 데이터 형이 특정 데이터 형과 그의 레퍼런스 형인 경우
에는 함수 오버로딩을 할 수 없다.
int foo3(int a, int b);
int foo3(int &a, int &b);
int x = 10, y = 20;
foo3(x, y);
