학생 클래스 (캡슐화 최종 실습) [디딤돌 C++]
▷Student.h
//Student.h
#pragma once
#include <string>
using namespace std;
class Student
{
const int pn;//주민번호
static int last_pn;//가장 최근에 부여한 주민 번호
string name;//이름
int iq;//지력
int hp;//체력
int stress;//스트레스
int scnt;//연속으로 공부한 횟수
//능력치의 디폴트, 최소, 최대값
static const int def_iq;
static const int min_iq;
static const int max_iq;
static const int def_hp;
static const int min_hp;
static const int max_hp;
static const int def_stress;
static const int min_stress;
static const int max_stress;
static const int def_scnt;
static const int min_scnt;
static const int max_scnt;
public:
Student(string name);//생성자
void Study();//공부하다.
void ListenLecture();//강의받다.
void Sleep();//잠자다.
void Relax();//휴식하다.
void Drink();//음료마시다.
void Sing();//노래하다.
string GetName()const;//이름 접근자
int GetPN()const;//주민번호 접근자
int GetIQ()const;//지력 접근자
int GetHP()const;//체력 접근자
int GetStress()const;//스트레스 접근자
private:
void SetIQ(int iq);//지력 설정자
void SetHP(int hp); //체력 설정자
void SetStress(int stress); //스트레스 설정자
void SetScnt(int scnt); //연속으로 공부한 횟수 설정자
};
▷Student.cpp
//Student.cpp
#include "Student.h"
#include <iostream>
using namespace std;
int Student::last_pn;
const int Student::def_iq=100;
const int Student::min_iq=0;
const int Student::max_iq=200;
const int Student::def_hp=100;
const int Student::min_hp=0;
const int Student::max_hp=200;
const int Student::def_stress=0;
const int Student::min_stress=0;
const int Student::max_stress=100;
const int Student::def_scnt=0;
const int Student::min_scnt=0;
const int Student::max_scnt=5;
Student::Student(string name):pn(++last_pn)
{
this->name = name;
SetIQ(def_iq);
SetHP(def_hp);
SetStress(def_stress);
SetScnt(def_scnt);
}
void Student::Study()
{
//공부하다(체력 5소모, 지력: scnt 만큼 증가, 스트레스: 2감소)
cout<<pn<<","<<name<<" 공부하다."<<endl;
SetHP(hp - 5);
SetIQ(iq+scnt);
SetStress(stress-2);
SetScnt(scnt+1);
}
void Student::ListenLecture()
{
//강의를 받다.(체력 3소모, 지력: scnt 만큼 증가, 스트레스: scnt 만큼 증가)
cout<<pn<<","<<name<<" 강의받다."<<endl;
SetHP(hp - 3);
SetIQ(iq+scnt);
SetStress(stress+scnt);
SetScnt(0);
}
void Student::Sleep()
{
//잠자다.(체력 10회복, 스트레스: 5감소)
cout<<pn<<","<<name<<" 잠자다."<<endl;
SetHP(hp + 10);
SetStress(stress-5);
SetScnt(0);
}
void Student::Relax()
{
//휴식하다.(체력 3회복, 스트레스: 25감소)
cout<<pn<<","<<name<<" 잠자다."<<endl;
SetHP(hp -+ 3);
SetStress(stress-25);
SetScnt(0);
}
void Student::Drink()
{
//음료를 마시다.(체력 5회복, 지력: 10감소 , 스트레스: 2증가)
cout<<pn<<","<<name<<"음료마시다."<<endl;
SetHP(hp + 5);
SetIQ(iq - 10);
SetStress(stress + 2);
SetScnt(0);
}
void Student::Sing()
{
//노래하다.(체력 10 소모, 지력: 5-scnt감소, 스트레스: 5-scnt증가)
cout<<pn<<","<<name<<" 노래하다."<<endl;
SetHP(hp - 10);
SetIQ(iq - (5-scnt));
SetStress(stress+(5-scnt));
SetScnt(0);
}
string Student::GetName()const
{
return name;
}
int Student::GetPN()const
{
return pn;
}
int Student::GetIQ()const
{
return iq;
}
int Student::GetHP()const
{
return hp;
}
int Student::GetStress()const
{
return stress;
}
void Student::SetIQ(int iq)
{
if(iq>max_iq)
{
iq = max_iq;
}
if(iq<min_iq)
{
iq = min_iq;
}
this->iq = iq;
}
void Student::SetHP(int hp)
{
if(hp>max_hp)
{
hp = max_hp;
}
if(hp<min_hp)
{
hp = min_hp;
}
this->hp = hp;
}
void Student::SetStress(int stress)
{
if(stress>max_stress)
{
stress = max_stress;
}
if(stress<min_stress)
{
stress = min_stress;
}
this->stress = stress;
}
void Student::SetScnt(int scnt)
{
if(scnt>max_scnt)
{
scnt = max_scnt;
}
if(scnt<min_scnt)
{
scnt = min_scnt;
}
this->scnt = scnt;
}
▷Program.cpp
//Program.cpp
#include "Student.h"
#include <iostream>
using namespace std;
void ViewStuInfo(Student *stu);//학생 정보 출력
void TestPN();//순차적으로 주민 번호 부여 테스트
void TestStudy();//공부하다 테스트
void TestEtc();//나머지 테스트
int main()
{
TestPN();//순차적으로 주민 번호 부여 테스트
TestStudy();//공부하다 테스트
TestEtc();//나머지 테스트
return 0;
}
void ViewStuInfo(Student *stu)
{
cout<<"주민 번호:"<<stu->GetPN()<<" 이름:"<<stu->GetName()<<endl;
cout<<"지력:"<<stu->GetIQ()<<" 체력:"<<stu->GetHP()<<" 스트레스:"<<stu->GetStress()<<endl;
}
void TestPN()
{
Student *stu;
cout<<"10명의 학생 생성 후 소멸(순차적으로 주민 번호 부여 테스트)"<<endl;
for(int i = 0; i<10;i++)
{
stu = new Student("테스트");
ViewStuInfo(stu);
delete stu;
}
cout<<endl;
}
void TestStudy()
{
Student *stu = new Student("홍길동");
ViewStuInfo(stu);
cout<<"공부하다 8회 실시"<<endl;
for(int i = 0; i<8;i++)
{
stu->Study();
ViewStuInfo(stu);
}
delete stu;
}
void TestEtc()
{
Student *stu = new Student("홍길동");
ViewStuInfo(stu);
cout<<"공부하다 3회 실시"<<endl;
for(int i = 0; i<3;i++)
{
stu->Study();
ViewStuInfo(stu);
}
cout<<"강의받다 3회 실시"<<endl;
for(int i = 0; i<3;i++)
{
stu->ListenLecture();
ViewStuInfo(stu);
}
cout<<"공부하다 1회 실시"<<endl;
stu->Study();
ViewStuInfo(stu);
//이하 생략
delete stu;
}
* 디딤돌 C++ 22. 캡슐화 최종 실습에서
'C++ > 디딤돌 C++' 카테고리의 다른 글
파생 개체의 생성과 소멸 과정 [디딤돌 C++] (0) | 2016.04.14 |
---|---|
상속 개요[디딤돌 C++] (0) | 2016.04.14 |
학생 클래스 (캡슐화 실습) [디딤돌 C++] (0) | 2016.04.14 |
복소스 클래스 (캡슐화 실습) [디딤돌 C++] (0) | 2016.04.14 |
특별한 멤버 this [디딤돌 C++] (0) | 2016.04.14 |