25
게게 게게게게게 게게 게게게

게임프로그래밍입문 7

Embed Size (px)

Citation preview

Page 1: 게임프로그래밍입문 7

게임 프로그래밍 입문

기연아

Page 2: 게임프로그래밍입문 7

함수

게임 프로그래밍

Page 3: 게임프로그래밍입문 7

함수 인자 전달 방식 Call-by-value

값을 복사해서 함수로 넘겨주는 방식 값만 복사하는 것이기 때문에 원본의 값이 변경되지 않음 고비용 , 복사손실의 문제 발생 가능

Call-by-reference 주소의 값을 함수로 넘겨주는 방식 원본의 값이 변경됨

Page 4: 게임프로그래밍입문 7

Call-by-value

Page 5: 게임프로그래밍입문 7

Call-by-reference

Page 6: 게임프로그래밍입문 7

구조체 (Struct)

게임 프로그래밍

Page 7: 게임프로그래밍입문 7

구조체란 ? 서로 다른 자료형을 묶어서 변수로 사용할 수 있음 이들을 묶어서 새롭게 정의할 수 있는 자료형

Page 8: 게임프로그래밍입문 7

구조체 사용하기 구조체를 초기화하여 하나의 변수처럼 사용 가능

Page 9: 게임프로그래밍입문 7

구조체 사용하기 구조체를 초기화하여 하나의 변수처럼 사용 가능

Page 10: 게임프로그래밍입문 7

구조체 사용하기 한 번에 여러 개의 구조체 값을 초기화할 수 있음

Page 11: 게임프로그래밍입문 7

구조체 사용하기 구조체 복사하여 사용하기

Page 12: 게임프로그래밍입문 7

구조체 사용하기 구조체 값을 입력받아서 사용하기

Page 13: 게임프로그래밍입문 7

실습 1 나만의 새로운 구조체를 선언 구조체 값을 입력하는 부분을 함수화해서 만들어보기 구조체의 값을 출력하는 부분을 함수화해서 만들어보기

Page 14: 게임프로그래밍입문 7

01 #include<iostream>02 using namespace std;03 struct namecard{04    char name[20];05    char job[30];06    char tel[20];07    char email[40];08 };09 10 void structPrn(namecard temp);  11 void structInput(namecard &temp);12 13 void main()14 {15  namecard  x, y, z;16 17   structInput(x);   // 함수의 호출18   structInput(y);19   structInput(z);20 21  cout<<"\n 이름 직업 연락처 이메일 ";22  cout<<"\n===========================================================";23  structPrn(x);  24  structPrn(y);25  structPrn(z);26  cout<<"\n=======================================================\n";27 }28 29 void structPrn(namecard temp)     // 함수의 정의30 {31   cout<<"\n"<<temp.name<<"\t"<<temp.job<<"\t"<<temp.tel<<"\t"<<temp.email;32 }33 34 void structInput(namecard &temp)35 {36   cout<<"\n이름을 입력하세요=>";37   cin>>temp.name;38   cout<<"직업을 입력하세요=>";39   cin>>temp.job;40   cout<<"연락처를 입력하세요=>";41   cin>>temp.tel;42   cout<<"이메일을 입력하세요=>";43   cin>>temp.email;44 }

Page 15: 게임프로그래밍입문 7

클래스 (Class)

게임 프로그래밍

Page 16: 게임프로그래밍입문 7

클래스란 ? 함수를 멤버변수로 갖는 구조체의 확장판

자료와 함수를 하나로 묶어서 사용 객체를 정의하는 수단

클래스에서 생성된 것을 객체라고 부름 이 객체를 중심으로 프로그래밍이 진행됨

Page 17: 게임프로그래밍입문 7

객체지향 프로그래밍이란 ? 객체를 중심으로 하는 프로그래밍

Object-oriented Programming

Page 18: 게임프로그래밍입문 7

새로운 자료형 멤버 변수와 멤버 함수로 구성되어 데이터의 저장과 처리를 모두 수행할 수 있음

클래스의 정의

Page 19: 게임프로그래밍입문 7

클래스 멤버의 접근 권한 private

클래스 멤버 함수에서만 접근 가능 ( 데이터 은닉 ) private: 을 붙이지 않으면 default 를 private 으로 인식함 멤버 변수를 주로 private 로 설정

public 객체가 선언되어 있는 영역에서 어디든지 사용 가능 Public: 아래에 적어야함 멤버 변수를 처리하기 위한 목적으로 작성하는 멤버 함수는 주로 public으로 설정

Page 20: 게임프로그래밍입문 7

클래스 멤버의 접근 권한

Page 21: 게임프로그래밍입문 7

생성자와 소멸자 생성자

객체를 생성할 때 기본 자료형처럼 초기값을 줄 수 있는데 그 것을 가능하게 하는 것이 생성자임 생성자는 멤버함수로 사용 생성자의 이름은 클래스 이름과 동일하게 사용 생성자는 자료형 ( 반환값의 유형 ) 을 지정하지 않음 생성자는 객체를 선언 / 생성할 때 컴파일러에 의해 자동으로 호출 객체의 초기화는 멤버변수의 초기화를 의미

소멸자 객체가 소멸될 때 자동으로 호출되며 객체를 정리하는 작업을 하는 멤버함수임 생성자와 마찬가지로 클래스 이름으로 함수 이름을 사용 생성자와 구분하기 위해 앞에 ~( 틸드 ) 기호를 붙임 생성자와 달리 소멸자는 다중정의를 할 수 없음

Page 22: 게임프로그래밍입문 7

생성자와 소멸자 실제로 class 에서 생성자와 소멸자가 정상적으로 호출되는지 확인해보자

Page 23: 게임프로그래밍입문 7

실습 2 두 개의 숫자를 설정하는 함수 두 개의 숫자를 더하는 함수 두 개의 숫자를 빼는 함수 위 세개의 함수를 클래스에 정의하여 덧셈 , 뺄셈을 수행하도록 구현

Page 24: 게임프로그래밍입문 7

#include <iostream>using namespace std;class calculate{private:

int num1;int num2;

public:int add();int minus();void setNum();

};void calculate::setNum(){

num1 = 10;num2 = 5;

}int calculate::add(){ return num1+num2;}int calculate::minus(){

return num1-num2;}int main(){ int sum;

int sub;calculate a;a.setNum();sum = a.add();sub = a.minus();cout << "sum is " << sum << " sub is " << sub << endl;return 0;

}

Page 25: 게임프로그래밍입문 7

클래스 상속 하나의 클래스를 또 다른 클래스에서 사용할 수 있도록 물려주는 개념