반응형
경일게임아카데미 프로그래밍반 28기 5일차 수업과제 (21. 04. 14)
함수
함수의 원형은 아래와 같다.
반환형 / 함수 이름 / (매개 변수)
예) void Test ()
예) int gugudan (int num)
#include <iostream>
using namesapce std;
void output()
{
cout << "12분 뒤면 쉬는 시간" << endl << endl;
}
void gugudan(int num)
{
for (int i = 1; i < 10; i++)
{
cout << num << " X " << i << " = " << num * i << endl;
}
cout << endl;
}
void main()
{
// output 함수 실행
output();
// 구구단 함수 실행
gugudan(8);
gugudan(2);
}
간단한 함수 예제 1
#include <iostream>
using namesapce std;
// 반환형이 int형인 attack 이름을 가진 함수
int attack(int hp, int atk)
{
hp -= atk;
cout << atk << "의 피해를 입어 " << hp << "의 체력이 남아 있습니다." << endl;
return hp;
}
void main()
{
// 개와 오리의 싸움
int dogHp = 100;
int dogAtk = 10;
int duckHp = 80;
int duckAtk = 15;
duckHp = attack(duckHp, dogAtk);
dogHp = attack(dogHp, duckAtk);
duckHp = attack(duckHp, dogAtk);
dogHp = attack(dogHp, duckAtk);
duckHp = attack(duckHp, dogAtk);
dogHp = attack(dogHp, duckAtk);
}
간단한 함수 예제 2
#include <iostream>
using namesapce std;
int heal(int hp, int healRate)
{
hp += healRate;
cout << "회복! " << healRate << "만큼 회복을 하여 " << hp << "가 되었습니다." << endl << endl;
return hp;
}
void main()
{
int healthPotion = 20;
duckHp = heal(duckHp, healthPotion);
}
함수의 전방선언
#include <iostream>
using namesapce std;
// 함수의 전방 선언 - 메인함수 위에 함수가 있다는 것을 명시해주고 실제 함수는 메인함수 뒤에 작성하는 것.
void output2();
void main()
{
// 함수 전방선언
// 일단 실행해봐~ 있으니까!
output2();
}
void output2()
{
cout << "전방 선언~!! 선언 멈춰!" << endl << endl;
}
Call By Reference, Call By Value (콜 바이 레퍼런스, 콜 바이 벨류) 차이
#include <iostream>
using namesapce std;
// call-by-value
// 원본 값은 건드리지 않는다
// 매개 변수를 함수 내부에서 복사해서 사용하는 과정을 거치기 떄문에 안전하지만 느리다.
// call-by-reference 타입형
void damaged(int& hp, int atk)
{
hp -= atk;
cout << "남은 체력 : " << hp << endl;
}
// call-by-reference
// 매개변수가 함수 내부에서 복사되는 과정 없이 원본 값을 바꾸기 떄문에 위험하다.
// call-by-reference 타입형
struct tagUnit
{
const char* name;
int hp;
int atk;
};
void main()
{
// call-by-value, reference의 예제
int orcHp = 100;
int orcHtk = 10;
int gganfHp = 80;
int gganfAtk = 8;
// 오버로드로 인한 주석처리
// damaged(orcHp, gganfAtk);
}
또 다른 Call By Reference (콜 바이 레퍼런스) 예제
#include <iostream>
using namesapce std;
struct tagUnit
{
const char* name;
int hp;
int atk;
};
void damaged(const char* name, int* hp, const char* name2, int atk)
{
*hp -= atk;
cout << name << "은(는) " << name2 << "에게 " << atk << "만큼의 데미지를 입어 체력이 " << *hp << " 되었습니다." << endl;
}
void main()
{
// call-by-reference 타입을 이용한 예
tagUnit human;
human.name = "우서";
human.hp = 100;
human.atk = 10;
tagUnit orc;
orc.name = "쓰랄";
orc.hp = 150;
orc.atk = 10;
damaged(orc.name, &orc.hp, human.name, human.atk);
damaged(human.name, &human.hp, orc.name, orc.atk);
damaged(orc.name, &orc.hp, human.name, human.atk);
damaged(human.name, &human.hp, orc.name, orc.atk);
damaged(orc.name, &orc.hp, human.name, human.atk);
damaged(human.name, &human.hp, orc.name, orc.atk);
}
포인터
#include <iostream>
using namesapce std;
void main()
{
// 포인터, == 가리키는 것
int a = 3;
int b = 7;
int* c;
cout << "b의 값은 : " << b << endl;
c = &b;
cout << "b의 값은 : " << b << endl;
*c = 9;
cout << "b의 값은 : " << b << endl << endl;
// 포인터를 이용한 별찍기
const char* star = "*****";
for (int i = 0; i < 5; i++)
cout << star + i << endl;
cout << endl;
for (int i = 0; i < 5; i++)
cout << star + 4 - i << endl;
}
반응형
'학원 > 경일게임아카데미' 카테고리의 다른 글
8. 여섯번째 수업 (1) | 2022.12.03 |
---|---|
7. 다섯번째 수업 과제 [카드게임 제작] (0) | 2022.12.02 |
5. 네번째 수업 과제 [1인 빙고게임 제작] (0) | 2022.11.30 |
4. 네번째 수업 (0) | 2022.11.29 |
3. 세번째 수업 (0) | 2022.11.28 |