n void Print Message cout Hi Im your

  • Slides: 51
Download presentation

함수의 기본 n 함수의 정의와 호출의 기본적인 예 void Print. Message() { cout <<

함수의 기본 n 함수의 정의와 호출의 기본적인 예 void Print. Message() { cout << "Hi, I'm your first function!!!n"; } int main() { // Print. Message() 함수를 호출한다. Print. Message(); return 0; } [그림 14 -3]

인자(Arguments)의 전달 (1) n 함수를 호출하면서 인자를 전달하는 예 int Factorial(int n); int main()

인자(Arguments)의 전달 (1) n 함수를 호출하면서 인자를 전달하는 예 int Factorial(int n); int main() { int result = Factorial( 5 ); cout << "5! 는 " << result << "입니다. n"; return 0; } int Factorial(int n) { int result = 1; for (int i = 1; i <= n; ++i) result *= i; return result; } n 실행 결과 [그림 14 -9] [그림 14 -10]

2차원 배열의 전달 2차원 배열을 인자로 전달하는 예 n int main() { int array[5][3]

2차원 배열의 전달 2차원 배열을 인자로 전달하는 예 n int main() { int array[5][3] = {{ 1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}, {13, 14, 15}}; Using 2 DArray( array); return 0; } void Using 2 DArray( int arr[][3] ) { for (int i = 0; i < 5; ++i) for (int j = 0; j < 3; ++ j) cout << "arr[" << i << "][" << j << "] = " << arr[i][j] << "n"; } n 실행 결과 [그림 14 -29]

CRT 함수의 사용 CRT 함수를 사용해서 두 점의 거리를 구하는 예 n #include <iostream>

CRT 함수의 사용 CRT 함수를 사용해서 두 점의 거리를 구하는 예 n #include <iostream> #include <cmath> using namespce std; // 중간 코드 생략 double Distance(const Point& p 1, const Point& p 2) { // 피타고라스의 정리를 사용한다. double distance; distance = sqrt( pow(p 1. x - p 2. x, 2) + pow(p 1. y - p 2. y, 2) ); // 결과를 반환한다. return distance; } [그림 14 -36]

기본적인 오버로딩의 규칙 n 인자의 타입을 통해서 호출될 함수를 결정한다. int Variable. Return. Type(

기본적인 오버로딩의 규칙 n 인자의 타입을 통해서 호출될 함수를 결정한다. int Variable. Return. Type( char c, int i ); double Variable. Return. Type( char c, double d ); . . . Variable. Return. Type( ‘A’, 100 ); Variable. Return. Type( ‘A’, 100. 12 ); n // 1번 // 2번 // 1번 함수 호출 // 2번 함수 호출 반환 값만 틀린 경우는 오버로드 할 수 없다. int Variable. Return. Type( char c, int i ); double Variable. Return. Type( char c, int i ); // Error. . . Variable. Return. Type( ‘A’, 100 ); // 어느 함수를 호출해야 할 지 모름 n 시그니처가 다르더라도 오버로드 할 수 없는 경우 void Same. Signature( int i ); void Same. Signature( int& r ); . . . int i = 10; Same. Signature( i ); // 어느 함수를 호출해야 할 지 모름

적당한 함수를 찾는 순서 n 오버로드 된 여러 버전의 함수 중에서 알맞은 함수를 찾는

적당한 함수를 찾는 순서 n 오버로드 된 여러 버전의 함수 중에서 알맞은 함수를 찾는 순서 n n n 1. 2. 3. 4. 정확하게 일치하는 경우(Exact Match) 승진에 의한 형변환(Promotion) 표준 형변환(Standard Conversions) 사용자에 의한 형변환(User-defined Conversions) 위의 규칙을 예제와 함께 살펴보자. void Which. One( float f ); void Which. One( double d ); void Which. One( int c ); int main() { Which. One( 3. 5 f ); return 0; } // 1순위 (exact match) // 2순위 (promotion) // 3순위 (standard conversions)

동적 메모리 할당의 응용(1) 문자열을 뒤집어서 복사해주는 함수 n char* Reverse. String(const char* src,

동적 메모리 할당의 응용(1) 문자열을 뒤집어서 복사해주는 함수 n char* Reverse. String(const char* src, int len) { char* reverse = new char [ len + 1]; for (int i = 0; i < len; ++i) reverse[i] = src[len - i - 1]; reverse[len] = NULL; return reverse; } int main() { char original[] = "NEMODORI"; char* copy = Reverse. String( original, 8); cout << original << "n"; cout << copy << "n"; delete[] copy; copy = NULL; return 0; }

동적 메모리 할당의 응용(3) n 화살표까지 실행되었을 때의 메모리 상태 char* Reverse. String(const char*

동적 메모리 할당의 응용(3) n 화살표까지 실행되었을 때의 메모리 상태 char* Reverse. String(const char* src, int len) { char* reverse = new char [ len + 1]; for (int i = 0; i < len; ++i) reverse[i] = src[len - i - 1]; reverse[len] = NULL; return reverse; } [16 -16] int main() { char original[] = "NEMODORI"; char* copy = Reverse. String( original, 8); cout << original << "n"; cout << copy << "n"; delete[] copy; copy = NULL; return 0; }

동적 메모리 할당의 응용(4) n 화살표까지 실행되었을 때의 메모리 상태 char* Reverse. String(const char*

동적 메모리 할당의 응용(4) n 화살표까지 실행되었을 때의 메모리 상태 char* Reverse. String(const char* src, int len) { char* reverse = new char [ len + 1]; for (int i = 0; i < len; ++i) reverse[i] = src[len - i - 1]; reverse[len] = NULL; return reverse; } [16 -17] int main() { char original[] = "NEMODORI"; char* copy = Reverse. String( original, 8); cout << original << "n"; cout << copy << "n"; delete[] copy; copy = NULL; return 0; }

동적 메모리 할당의 응용(5) n 화살표까지 실행되었을 때의 메모리 상태 char* Reverse. String(const char*

동적 메모리 할당의 응용(5) n 화살표까지 실행되었을 때의 메모리 상태 char* Reverse. String(const char* src, int len) { char* reverse = new char [ len + 1]; for (int i = 0; i < len; ++i) reverse[i] = src[len - i - 1]; reverse[len] = NULL; return reverse; } int main() { char original[] = "NEMODORI"; char* copy = Reverse. String( original, 8); cout << original << "n"; cout << copy << "n"; delete[] copy; copy = NULL; return 0; } [16 -18]

동적 메모리 할당의 응용(6) n 화살표까지 실행되었을 때의 메모리 상태 char* Reverse. String(const char*

동적 메모리 할당의 응용(6) n 화살표까지 실행되었을 때의 메모리 상태 char* Reverse. String(const char* src, int len) { char* reverse = new char [ len + 1]; for (int i = 0; i < len; ++i) reverse[i] = src[len - i - 1]; reverse[len] = NULL; return reverse; } [16 -19] int main() { char original[] = "NEMODORI"; char* copy = Reverse. String( original, 8); cout << original << "n"; cout << copy << "n"; delete[] copy; copy = NULL; return 0; }

동적 메모리 할당의 응용(7) n 화살표까지 실행되었을 때의 메모리 상태 char* Reverse. String(const char*

동적 메모리 할당의 응용(7) n 화살표까지 실행되었을 때의 메모리 상태 char* Reverse. String(const char* src, int len) { char* reverse = new char [ len + 1]; for (int i = 0; i < len; ++i) reverse[i] = src[len - i – 1]; reverse[len] = NULL; return reverse; } int main() { char original[] = "NEMODORI"; char* copy = Reverse. String( original, 8); cout << original << "n"; cout << copy << "n"; delete[] copy; copy = NULL; return 0; } [16 -20]

동적 메모리 할당의 응용(8) n 화살표까지 실행되었을 때의 메모리 상태 char* Reverse. String(const char*

동적 메모리 할당의 응용(8) n 화살표까지 실행되었을 때의 메모리 상태 char* Reverse. String(const char* src, int len) { char* reverse = new char [ len + 1]; for (int i = 0; i < len; ++i) reverse[i] = src[len - i - 1]; reverse[len] = NULL; return reverse; } [16 -21] int main() { char original[] = "NEMODORI"; char* copy = Reverse. String( original, 8); cout << original << "n"; cout << copy << "n"; delete[] copy; copy = NULL; return 0; }

동적 메모리 할당의 응용(9) n 화살표까지 실행되었을 때의 메모리 상태 char* Reverse. String(const char*

동적 메모리 할당의 응용(9) n 화살표까지 실행되었을 때의 메모리 상태 char* Reverse. String(const char* src, int len) { char* reverse = new char [ len + 1]; for (int i = 0; i < len; ++i) reverse[i] = src[len - i - 1]; reverse[len] = NULL; return reverse; } [16 -22] int main() { char original[] = "NEMODORI"; char* copy = Reverse. String( original, 8); cout << original << "n"; cout << copy << "n"; delete[] copy; copy = NULL; return 0; }