C++ 프로그래밍 10 2009년 2학기 전자정보공학대학 컴퓨터공학부.

Slides:



Advertisements
Similar presentations
 수학 10- 나  1 학년 2 학기  Ⅰ. 도형의 방정식 1. 평면좌표 (1/24) 두 점 사이의 거리 수업 계획 수업 활동.
Advertisements

명품 C++ 프로그래밍 3장. 클래스와 객체.
Activation Records & Recursion
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제1장 기초 사항.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
C++ Espresso 제2장 제어문과 함수.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
C 프로그래밍.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
2007 1학기 10 함수 활용.
8. 객체와 클래스 (기본).
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express Slide 1 (of 26)
C++ Espresso 제9장 다형성.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
C언어: 배열 (Arrays).
6장. printf와 scanf 함수에 대한 고찰
Part 08 함수 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
명품 C++ 8장 상속.
CHAP 3:배열, 구조체, 포인터.
자료 구조: Chapter 3 (2)구조체, 포인터
Chapter 4 매개변수와 오버로딩 Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
명품 C++ 7장 프렌드와 연산자 중복.
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
14장. 함수 1 01_ 함수의 기본 02_ 인자의 전달.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C 프로그래밍.
C ++ 프로그래밍 시작.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
C++ Programming: chapter 7 – inheritence
스택(Stack) 김진수
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
5주차: Functions in C.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Chapter 10 함수 기본.
컴퓨터 개론 및 실습 Dept. Computer Eng. Hankuk University of Foreign Studies
제5장 생성자와 접근제어 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
배열과 연결리스트 연결리스트 배열 메모리 할당이 연속적이어서 인덱스 사용시 검색이 빠르다.
제 6장 함수 Hello!! C 언어 강성호 김학배 최우영.
가상함수와 추상 클래스.
Chapter 1 C와는 다른 C++. 최호성.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
컴퓨터 그래픽 I 영화 홍보 사이트 분석 과목 : 컴퓨터 그래픽 I 담당교수 : 손애경 교수님 학과 : 정보처리과 1반(A1)
루프와 카운트 Looping and counting
멤버 함수인 operator+()가 실행, 또는 전역 함수인 operator+()가 실행 Point p3 = p1+p2; 에서
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
C-언어와 기반구조 정보보호학과 이정수 교수.
5. 논리적 자료표현 : 구조체.
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
3장,4장 발표 서정우.
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
C++ Espresso 제13장 입출력과 파일처리.
포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab..
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
엔화 대환/대출 자금용도 대상 이자 차액 효과 (A,B,C) 환율 리스크 헷징 (A,B) 엔화의 평균환율 (A,B,C)
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
C++ 언어의 특징
배열, 포인터, 함수 Review & 과제 1, 2.
프로그래밍 기법 최적화 프로그래밍.
Presentation transcript:

C++ 프로그래밍 10 2009년 2학기 전자정보공학대학 컴퓨터공학부

Outline Review: 배열과 구조체와 포인터 함수

배열과 포인터 일반적인 변수에서의 포인터와 거의 같다. int arrays[10]; int * p = &arrays[5];

포인터에 정수를 더하기/빼기 배열을 가리키는 포인터에 정수를 더하는/빼는 것은 원소의 개수만큼 이동하는 것을 의미! -1 +1

포인터간의 뺄셈 주소의 차가 아닌 사이의 원소의 개수가 나온다 int array[10]; int * p1 = array[5]; cout<<“p1=“<<p1<<“\n”; cout<<“p2=“<<p2<<“\n”; cout<<“p2-p1=“<<p2-p1<<“\n”;

배열의 특정 원소를 가리키기 int array[10]; int * p = array[0]; 5번째 원소는? array[5]; 배열의 이름은 첫번째 원소를 가리키는 상수 포인터

포인터의 배열 포인터를 원소로 갖는 배열을 정의할 수 있다 변수형 *포인터이름[원소개수]; 예제) int * pArray[3];

구조체를 가리키는 포인터 구조체를 변수형처럼 사용해서 포인터를 정의 할 수 있다 struct rectangle { int x,y; int width, height; }; rectangle rc; rectangle * p = &rc;

구조체의 맴버 변수 접근 구조체변수.맴버변수 구조체에서는: 구조체포인터는: (*구조체포인터).맴버변수 구조체포인터->맴버변수 구조체포인터->맴버변수

구조체의 맴버 변수 접근 예 struct rectangle { int x,y; int width, height; }; rectangle rc; rectangle * p = &rc; rc.x=10; (*p).x = 10; p->x = 10; 모두 같다

구조체와 포인터 구조체 내에 포인터를 맴버로 가질 수 있다 struct IHavePointer { int a; int * p; };

구조체를 가리키는 맴버 포인터 구조체를 가리키는 포인터를 맴버로 가질 수 있다 struct test { int a; test * p; };

구조체를 가리키는 맴버 포인터 struct Test { int id; Test * p; }; Test a,b,c; a.id = 1; a.p=&b; b.id = 2; b.p=&c; c.id = 3; c.p=NULL; cout<<“a.id:”<<a.id<<“\n”; cout<<“b.id:”<<a.p->id<<“\n”; cout<<“c.id:”<<a.p->p->id<<“\n”;

구조체를 가리키는 맴버 포인터 NULL

코딩연습 앞의 코드를 변경하여, while 문을 사용하여 a로 부터 출발하여 a, b, c의 int 내용을 다 출력 해주는 프로그램을 만들어라

Announcement 휴강공고 10월 8일 (목요일) 보강 계획: 추후 공고

함수1

함수 코드를 정리하고 정돈한다!  사후관리용이

함수란 작은 프로그램 (subprogram)

함수를 쓰는 이유 프로그램 작성 용이 절차의 추상화 일을 여러 단계의 작은 일로 쪼개는 것 Procedural Abstraction 일을 여러 단계의 작은 일로 쪼개는 것 Divide-and-conquer 반복적인 일의 수행 시 소스코드의 크기를 줄여준다

함수의 모양 초등학교 산수시간에… ?

y = f(x) 함수의 모양 고등학교 수학시간에… x: 함수의 인자 (parameter) f(): 함수 본체(body) y: 함수의 결과값 (반환값:return value)

함수의 모양 함수의 정의: 반환변수형 함수이름(인자1, 인자2,…) { 함수 내용; return 반환값; }

함수의 호출 인자(parameter)의 형태 및 개수가 함수의 정의와 같아야 한다. 함수이름(인자1, 인자2,…);

함수의 가장 간단한 모양 함수의 정의-인자와 반환값이 없을 경우: void 함수이름() { 함수 내용; }

간단한 함수 예제 #include <iostream> using namespace std; void printMessage() { cout<<“My first function! \n”; } int main() printMessage(); return 0;

간단한 함수 예제

간단한 함수 예제 #include <iostream> using namespace std; void printMessage() { cout<<“My first function! \n”; } int main() printMessage(); return 0;

함수의 위치 #include <iostream> using namespace std; int main() { printMessage(); return 0; } void printMessage() cout<<“My first function! \n”; ERROR!: main은 printMessage함수가 있는지 모른다!

함수의 위치 #include <iostream> using namespace std; void printMessage(); int main() { printMessage(); return 0; } void printMessage() cout<<“My first function! \n”; 어딘가에 함수가 있음을 알려줌 함수의 원형 (prototype)

함수의 모양 함수의 정의 – 반환값이 있는 경우: 반환변수형 함수이름() { 함수 내용; return 반환값; }

간단한 함수 예제2 #include <iostream> using namespace std; int three() { return 3; } int main() int i; i=three(); cout<<“i=“<<i<<“\n”; return 0;

간단한 함수 예제2 함수는 하나의 값만을 반환할 수 있다

Return 의 활용 Return의 두가지 의미 void printMessage() { return; 값을 반환 함수를 끝내라 void printMessage() { return; cout<<“My first function! \n”; } int main() printMessage(); return 0;

함수 활용 시의 주의점 다른 함수에 정의되어 있는 변수를 사용할 수 없다. void sub(); int main() { // 변수를 정의한다. int a = 3; // 함수 호출 sub(); return 0; } void sub() // 변수를 사용한다. ++a; // Error

인자(Arguments)의 전달 (1) 함수를 호출하면서 인자를 전달하는 예 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;

인자(Arguments)의 전달 (1) 함수를 호출하면서 인자를 전달하는 예 [그림 14-10]

인자의 전달 (2) 인자는 함수의 매개 변수(Parameters)에 대입된다. [그림 14-11]

인자 전달의 규칙 함수가 호출될 때마다 인자의 값이 매개 변수로 대입되는 가상의 코드가 실행된다. int max(int a, int b) { return a > b ? a : b; } int main() // 3과 5중에 큰 값을 구한다. int ret = max(3, 5); return 0;

인자 전달의 규칙 함수가 호출될 때마다 인자의 값이 매개 변수로 대입되는 가상의 코드가 실행된다. [그림 14-13]

인자의 전달과 메모리 구조(1) main() 함수가 시작되고 화살표까지 실행된 순간의 메모리 상태 int max(int a, int b) { return a > b ? a : b; } int main() int arg1 = 3; int arg2 = 5; int ret = max(arg1, arg2); return 0; [그림 14-15]

인자의 전달과 메모리 구조(2) max() 함수가 호출되고 화살표까지 실행된 순간의 메모리 상태 이때 다음과 같은 가상의 코드가 실행된다. int max(int a, int b) { return a > b ? a : b; } int main() int arg1 = 3; int arg2 = 5; int ret = max(arg1, arg2); return 0; [그림 14-16] int a = arg1; int b = arg2;

인자의 전달과 메모리 구조(3) max() 함수가 끝나고 화살표까지 실행된 순간의 메모리 상태 int max(int a, int b) { return a > b ? a : b; } int main() int arg1 = 3; int arg2 = 5; int ret = max(arg1, arg2); return 0; [그림 14-17]

함수의 연습 인자 n을 받아서 “*”을 n개 만큼 출력하는 함수를 만들어라. example) n=5인 경우 ***** 이 함수를 이용하여 다음과 같은 삼각형을 출력! * ** *** **** *****

포인터와 레퍼런스의 사용 반환되어야 하는 값이 2개 이상일 때? 포인터를 사용 레퍼런스를 사용

포인터 변수를 인자로 전달하기(1) 나누기를 하여 몫과 나머지를 구한다 void Div_Rem(int a, int b, int div, int rem) { div = a/b; rem = a%b } int main() int div=0; int rem=0; Div_Rem(23,5, div, rem); cout<<“23 = 5*“<<div<<“+”<<rem<<“\n”; return 0;

포인터 변수를 인자로 전달하기(1) 나누기를 하여 몫과 나머지를 구한다 void Div_Rem(int a, int b, int * pdiv, int * prem) { * div = a/b; * rem = a%b } int main() int div=0; int rem=0; Div_Rem(23,5, &div, &rem); cout<<“23 = 5*“<<div<<“+”<<rem<<“\n”; return 0;

포인터 변수를 인자로 전달하기(2) 화살표까지 실행된 순간의 메모리 상태 void Div_Rem(int a, int b, int * pdiv, int * prem) { * div = a/b; * rem = a%b } int main() int div=0; int rem=0; Div_Rem(23,5, &div, &rem); return 0; pdiv prem [그림 14-21] 23 5 div rem

포인터 변수를 인자로 전달하기(2) 화살표까지 실행된 순간의 메모리 상태 void Div_Rem(int a, int b, int * pdiv, int * prem) { * div = a/b; * rem = a%b } int main() int div=0; int rem=0; Div_Rem(23,5, &div, &rem); return 0; pdiv prem [그림 14-21] 23 5 div 4 rem 3

포인터 변수를 인자로 전달하기(4) 포인터 타입의 인자를 사용해서 함수의 결과 값을 얻어오는 방법의 정리 함수의 매개 변수는 포인터 타입으로 정의한다. 인자를 넘겨줄 때는 결과 값을 담고 싶은 변수의 주소를 넘겨준다. 함수 안에서 결과를 넘겨줄 때는 매개변수가 가리키는 곳에 값을 넣어준다.

레퍼런스 변수를 인자로 전달하기(1) 레퍼런스 변수를 사용해서 함수 밖으로 결과를 전달 void Div_Rem(int a, int b, int& pdiv, int& prem) { div = a/b; rem = a%b } int main() int div=0; int rem=0; Div_Rem(23,5, div, rem); cout<<“23 = 5*“<<div<<“+”<<rem<<“\n”; return 0;

레퍼런스 변수를 인자로 전달하기(2) 레퍼런스 타입의 인자를 사용해서 함수의 결과 값을 얻어오는 방법의 정리 함수의 매개 변수는 레퍼런스 타입으로 정의한다. 인자를 넘겨줄 때는 결과 값을 담고 싶은 변수를 그대로 넘겨준다. 함수 안에서 결과를 넘겨줄 때는 매개 변수에 값을 넣어준다.

코딩연습1 문자열을 입력 받아 입력 받은 문자열을 한 글자씩 미루게 만들어 주는 함수를 만들어라: 입력 문자열: abcde 함수 호출뒤: bcdea 이 함수를 이용하여 다음과 같이 출력하는 코드를 작성하라 입력: abcde 출력: abcde bcdea cdeab deabc eabcd

코딩연습2 아래와 같은 구조체를 정의하고 이 구조체 변수, a, b, c, d를 정의 한 뒤 두 변수를 연결시켜 주는 다음의 함수를 만들고, void Connect(test * front, test * back); 이를 이용해 a  b  c  d  NULL 로 연결되는 구조를 만들라. 연결된 변수들을 출력해 주는 다음의 함수 void print(test * a); 를 만들고 값들을 출력해 보여라. struct test { int val; test * p; };