학생 클래스 (캡슐화 실습) [디딤돌 C++]
▷Student.h
//Student.h
#pragma once
#include <string>
#include <iostream>
using namespace std;
enum SIndex //과목 열거형
{
KOREAN, ENGLISH, MATH, MAX_SUBJECT
};
class Student//학생 클래스
{
static int last_num;//정적 멤버 필드
const int num;//상수화 멤버 필드
string name;
int scores[MAX_SUBJECT];
static const string titles[MAX_SUBJECT];//과목명 - 정적 멤버 필드
public:
static int GetStuCount();//정적 메서드
Student(string name);//생성자 초기화
bool SetScore(int sindex,int score);//성적 설정자
int GetScore(int sindex)const;//성적 접근자
int GetTotal()const;//총점 접근자
double GetAverage()const; //평균 접근자
bool AvailSIndex(int sindex)const;//성적 인덱스가 유효한지 판별
void View()const; //정보 출력
private:
bool SetScore(int sindex,int score,int); //성적 설정자
};
▷Student.cpp
//Student.cpp
#include "Student.h"
const string Student::titles[MAX_SUBJECT]={"국어","영어","수학"};
int Student::last_num;
int Student::GetStuCount()//정적 메서드
{
return last_num;
}
Student::Student(string name):num(++last_num)//생성자 초기화
{
this->name = name;
//성적 초기화
for(int si = 0; si<MAX_SUBJECT; si++)
{
SetScore(si,-1, 0);
}
}
bool Student::SetScore(int sindex,int score)//성적 설정자(설정하기)
{
if(AvailSIndex(sindex))//과목 번호가 유효할 때
{
return SetScore(sindex,score,0);//성적 설정
}
return false;
}
int Student::GetScore(int sindex)const//성적 접근자(가져오기)
{
if(AvailSIndex(sindex))//과목 번호가 유효할 때
{
return scores[sindex];
}
return -1;
}
int Student::GetTotal()const//합계 접근자(가져오기)
{
int sum=0;
for(int i = 0; i<MAX_SUBJECT; i++)
{
if(scores[i] != -1)//성적이 입력 상태일 때만
{
sum +=scores[i];//합계에 더함
}
}
return sum;
}
double Student::GetAverage()const//평균 접근자(가져오기)
{
return GetTotal()/(double)(MAX_SUBJECT);
}
bool Student::AvailSIndex(int sindex)const//과목 인덱스가 유효한지 판별
{
return (sindex>=0)&&(sindex<MAX_SUBJECT);
}
void Student::View()const
{
cout<<"번호:"<<num<<" 이름:"<<name<<endl;
for(int i = 0; i<MAX_SUBJECT;i++)
{
if(scores[i]==-1)
{
cout<<titles[i]<<": 입력 안 함"<<endl;
}
else
{
cout<<titles[i]<<":"<<scores[i]<<endl;
}
}
cout<<"총점:"<<GetTotal()<<" 평균:"<<GetAverage()<<endl;
cout<<"++++++++++++++++++++++++"<<endl;
}
bool Student::SetScore(int sindex,int score,int)//성적 설정자(설정하기)
{
if((score<0)||(score>100))//성적이 범위를 벗어나면
{
scores[sindex] = -1;
return false;
}
scores[sindex] = score;
return true;
}
▷Program.cpp
//Program.cpp
#include "Student.h"
int main()
{
Student *arr[3];
//학생 개체 생성
arr[0] = new Student("홍길동");
arr[1] = new Student("강감찬");
arr[2] = new Student("이순신");
//학생 목록 출력
cout<<"현재 학생 수:"<<Student::GetStuCount()<<endl;
for(int i = 0; i<3;i++)
{
arr[i]->View();
}
arr[0]->SetScore(0,90);//정상
arr[0]->SetScore(1,80);//정상
arr[0]->SetScore(3,90);//설정 오류
arr[1]->SetScore(0,100);//정상
arr[1]->SetScore(1,180);//설정 오류
arr[1]->SetScore(2,80);//정상
arr[2]->SetScore(0,80);//정상
arr[2]->SetScore(1,90);//정상
arr[2]->SetScore(2,90);//잘못
//학생 목록 출력
cout<<"현재 학생 수:"<<Student::GetStuCount()<<endl;
for(int i = 0; i<3;i++)
{
arr[i]->View();
}
//학생 개체 소멸
for(int i = 0; i<3;i++)
{
delete arr[i];
}
return 0;
}
* 디딤돌 C++ 20. 캡슐화 실습에서
'C++ > 디딤돌 C++' 카테고리의 다른 글
상속 개요[디딤돌 C++] (0) | 2016.04.14 |
---|---|
학생 클래스 (캡슐화 최종 실습) [디딤돌 C++] (0) | 2016.04.14 |
복소스 클래스 (캡슐화 실습) [디딤돌 C++] (0) | 2016.04.14 |
특별한 멤버 this [디딤돌 C++] (0) | 2016.04.14 |
학생 클래스 (상수화 멤버) [디딤돌 C++] (0) | 2016.04.14 |