350 likes | 481 Views
프로그래밍 세미나. 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 << 값 ;
E N D
프로그래밍 세미나 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 << 값; • 입력 함수 : cin >> 값; • using namespace std; 를 선언하지 않으면? • 기본 사용 함수 앞에 std:: 를 붙여야 한다. • ex) std::cout, std::cin #include <iostream> using namespace std; 선언
C보다 나은 C++ I • C와 C++의 차이점 • 입력과 출력 함수의 기본적인 사용 cout<< 값; 형식 1 cout<< 값1 << 값2 << 값3; 형식 2 cin >> 변수명; 형식 1 cin >> 변수1 >> 변수2 >> 변수3; 형식 2
C보다 나은 C++ I • C 방식의 참, 거짓 • 0은 거짓(false), 1은 참(true) • C++ 방식의 참 거짓 • 기본적으로 TRUE와 FALSE가 키워드로 제공 #define TRUE 1 #define FALSE 0 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) • 다른변수에 대한 이름만 존재할 뿐 메모리는 할당되지 않음 • 레퍼런스의 주소를 구하면 참조 변수의 주소가 구해짐 10 ref 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는 x의 별명 ref4 = y; // 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; int *y = &b; void Swap( int *x , int *y ) { int temp = *x; *x = *y; *y = temp; }
C보다 나은 C++ I • 예제 1-4
C보다 나은 C++ I • 예제 1-4
C보다 나은 C++ I • 레퍼런스에 의한 함수 인자 전달 • 레퍼런스에 의한 전달(call-by-reference) void main() { … … Swap( a , b ); … … } int &x = a; 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; // cout << data; 의 의미 ref = 200; // const 레퍼런스는 변경할 수 없으므로 컴파일 에러 data = 200; // data를 직접 변경하는 것은 가능하다.
C보다 나은 C++ I • 연습문제
C보다 나은 C++ I • 연습문제 return 값이 있으므로 void형이 아닌 double형
C보다 나은 C++ I • 디폴트 인자 • 함수를 호출할 때 인자를 생략하면 디폴트 값이 자동적으로 사용 • 디폴트 인자를 지정할 때는 함수의 선언에 지정 voidfoo ( char c, inti, double d = 0.5 ); 디폴트 인자
C보다 나은 C++ I • 디폴트 인자 • 함수를 호출할 때 인자를 생략하면 디폴트 값이 자동적으로 사용 • 디폴트 인자를 지정할 때는 함수의 선언에 지정 void foo(char c = ‘A’, inti = 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); 이 호출된다.
C보다 나은 C++ I • 예제 1-5
C보다 나은 C++ I • 예제 1-5
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
C보다 나은 C++ I • 디폴트 인자 사용 규칙 • 함수의 가장 오른쪽 인자부터 지정해야 한다. • 함수의 가장 오른쪽 인자부터 생략해야 한다. void foo(char c, inti, double); void foo(char c, inti, double d = 0.5); void foo(char c, inti = 10, double d = 0.5); void foo(char c = ‘A’, inti = 10, double d = 0.5); void foo(char c = ‘A’, inti = 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(inta, int b); int foo3(int &a, int &b); int x = 10, y = 20; foo3(x, y);