C 6 include iostream include cstring using namespace

  • Slides: 47
Download presentation

예제 : C-스트링을 이용하여 암호확인 6 #include <iostream> #include <cstring> using namespace std; int

예제 : C-스트링을 이용하여 암호확인 6 #include <iostream> #include <cstring> using namespace std; int main() { char password[11]; cout << "프로그램을 종료하려면 암호를 입력하세요. " << endl; while(true) { cout << "암호>>"; cin >> password; if(strcmp (password, "C++") == 0 ) { cout << "프로그램을 정상 종료합니다. " << endl; break; } else cout << "암호가 틀립니다~~" << endl; } }

예제 : string클래스를 이용한 문자열 처리 8 #include <iostream> #include <string> using namespace std;

예제 : string클래스를 이용한 문자열 처리 8 #include <iostream> #include <string> using namespace std; int main() { string song("Falling in love with you"); // 문자열 song string elvis("Elvis Presley"); // 문자열 elvis string singer; // 문자열 singer cout << song + "를 부른 가수는"; // + 로 문자열 연결 cout << "(힌트 : 첫글자는 " << elvis[0] << ")? "; // [] 연산자 사용 } getline(cin, singer); // 문자열 입력 if(singer == elvis) // 문자열 비교 cout << "맞았습니다. "; else cout << "틀렸습니다. "+ elvis + "입니다. " << endl; // +로 문자열 연결

함수 중복 성공 사례 21 int sum(int a, int b, int c) { return

함수 중복 성공 사례 21 int sum(int a, int b, int c) { return a + b + c; } double sum(double a, double b) { return a + b; } int sum(int a, int b) { return a + b; } 성공적으로 중복된 sum() 함수들 int main(){ cout << sum(2, 5, 33); cout << sum(12. 5, 33. 6); } cout << sum(2, 6); 중복된 sum() 함수 호출. 컴파일러가 구분

예제 6 -1 big() 함수 중복 연습 24 큰 수를 리턴하는 다음 두 개의

예제 6 -1 big() 함수 중복 연습 24 큰 수를 리턴하는 다음 두 개의 big 함수를 중복 구현하라. int big(int a, int b); // a와 b 중 큰 수 리턴 int big(int a[], int size); // 배열 a[]에서 가장 큰 수 리턴 #include <iostream> using namespace std; int big(int a, int b) { // a와 b 중 큰 수 리턴 if(a>b) return a; else return b; } int big(int a[], int size) { // 배열 a[]에서 가장 큰 수 리턴 int res = a[0]; for(int i=1; i<size; i++) if(res < a[i]) res = a[i]; return res; } int main() { int array[5] = {1, 9, -2, 8, 6}; cout << big(2, 3) << endl; cout << big(array, 5) << endl; } 3 9

매개변수에 값을 정하는 규칙 29 사례 2 void square(int width=1, int height=1); 디폴트 매개

매개변수에 값을 정하는 규칙 29 사례 2 void square(int width=1, int height=1); 디폴트 매개 변수를 가진 square() void square(int width= 1, int height= 1); square( ); square( , ); square( 1, 1 ); square(5); square( 5, 1 ); square(3, 8); square( 3, 8 ); 컴파일러에 의해 변환되는 과정

예제 6– 3 디폴트 매개 변수를 가진 함수 선언 및 호출 31 #include <iostream>

예제 6– 3 디폴트 매개 변수를 가진 함수 선언 및 호출 31 #include <iostream> #include <string> using namespace std; // 원형 선언 void star(int a=5); void msg(int id, string text=""); 디폴트 매개 변수 선언 // 함수 구현 void star(int a) { for(int i=0; i<a; i++) cout << '*'; cout << endl; } 동일한 코드 void msg(int id, string text="") { cout << id << ' ' << text << endl; } void msg(int id, string text) { cout << id << ' ' << text << endl; } int main() { // star() 호출 star(); star(10); } // msg() 호출 msg(10); msg(10, "Hello"); star(5); msg(10, “”); void star(int a=5) { for(int i=0; i<a; i++) cout << '*'; cout << endl; } ********** 10 10 Hello

37

37

#include <iostream> using namespace std; a, b에 m, n의 값 복사 void swap(int a,

#include <iostream> using namespace std; a, b에 m, n의 값 복사 void swap(int a, int b) { int tmp; } 2 a 29 b 92 swap() 스택 tmp = a; a = b; b = tmp; int main() { int m=2, n=9; swap(m, n); cout << m << ‘ ‘ << n; } a swap() 스택 m, n 변화 없음 m 2 m 2 n 9 n 9 main() 스택 (1) swap() 호출 전 main() 스택 (2) swap() 호출 직후 29 main() 스택 (3) swap() 실행 main() 스택 (4) swap() 리턴 후 값에 의한 호출 #include <iostream> using namespace std; a, b에 m, n의 주소 전달 void swap(int *a, int *b) { int tmp; } 38 tmp = *a; *a = *b; *b = tmp; int main() { int m=2, n=9; swap(&m, &n); cout << m << ‘ ‘ << n; } a a b b swap() 스택 m, n 변경 m 2 m 29 m 9 n 9 n 92 n 2 main() 스택 92 swap() 스택 (1) swap() 호출 전 main() 스택 (2) swap() 호출 직후 main() 스택 (3) swap() 실행 주소에 의한 호출 main() 스택 (4) swap() 리턴 후

‘값에 의한 호출’로 객체 전달 30 int main() { Circle waffle(30); increase(waffle); cout <<

‘값에 의한 호출’로 객체 전달 30 int main() { Circle waffle(30); increase(waffle); cout << waffle. get. Radius() << endl; } Circle waffle(30); waffle 생성 radius call by value void increase(Circle c) { int r = c. get. Radius(); c. set. Radius(r+1); } 30 waffle main() 스택 객체 복사 increase(waffle); 함수 호출 radius 30 waffle 30 radius c void increase(Circle c) 매개 변수 객체 c 생성 increase() 스택 radius 30 waffle cout << waffle. get. Radius() ; 40 화면에 30 출력 radius 30 waffle radius c 31 c. set. Radius(r+1); c의 반지름 1 증가 함수가 종료하면 객체 c 소멸

예제 5 -1 ‘값에 의한 호출’시 매개 변수의 생성자 실행되지 않음 41 #include <iostream>

예제 5 -1 ‘값에 의한 호출’시 매개 변수의 생성자 실행되지 않음 41 #include <iostream> using namespace std; class Circle { private: int radius; public: Circle(); Circle(int r); ~Circle(); double get. Area() { return 3. 14*radius; } int get. Radius() { return radius; } void set. Radius(int radius) { this->radius = radius }; Circle: : Circle() { radius = 1; cout << "생성자 실행 radius = " << radius << endl; } Circle: : Circle(int radius) { this->radius = radius; cout << "생성자 실행 radius = " << radius << endl; } Circle: : ~Circle() { cout << "소멸자 실행 radius = " << radius << endl; } void increase(Circle c) { int r = c. get. Radius(); c. set. Radius(r+1); } waffle의 내용이 int main() { 그대로 c에 복사 Circle waffle(30); increase(waffle); cout << waffle. get. Radius() << endl; } waffle 생성 waffle 소멸 생성자 실행 radius = 30 소멸자 실행 radius = 31 30 소멸자 실행 radius = 30 c의 생성자 실행되지 않았음 c 소멸

‘값에 의한 호출’시에 생성자와 소멸자의 비대칭 실행 Circle waffle(30); Circle() 생 성자 실행 30

‘값에 의한 호출’시에 생성자와 소멸자의 비대칭 실행 Circle waffle(30); Circle() 생 성자 실행 30 radius waffle main() 스택 객체 복사 increase(waffle); 30 radius waffle void increase(Circle c) 30 radius c 생성자 실행되 지 않음 increase() 스택 radius c main() 함수 종료 ~Circle() 소 멸자 실행 42 radius 30 waffle 31 increase() 함수 종료 소멸자 실행

‘주소에 의한 호출’로 객체 전달 31 int main() { Circle waffle(30); increase(&waffle); cout <<

‘주소에 의한 호출’로 객체 전달 31 int main() { Circle waffle(30); increase(&waffle); cout << waffle. get. Radius() ; } Circle waffle(30); waffle 생성 radius 30 waffle main() 스택 increase(&waffle); 함수 호출 void increase(Circle *p) { int r = p->get. Radius(); p->set. Radius(r+1); } call by address radius 30 waffle의 주소가 p 에 전달 p waffle void increase(Circle *p) 매개 변수 p 생성 increase() 스택 radius 31 waffle cout << waffle. get. Radius(); 31이 화면에 출력됨 44 radius 31 waffle p p->set. Radius(r+1); waffle의 반지름 1 증가 함수가 종료하면 포인터 p 소멸