[C++] 벡터를 사용해서 출석부만들기
2022. 6. 14. 21:17ㆍ코딩 1막 <C++개념편>/코딩 1막 <C++응용편>
728x90
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct SchoolMember
{
string name;
int id;
SchoolMember()
{
}
SchoolMember(string _name, int _id)
{
name = _name;
id = _id;
}
//virtual 가상함수
//자식에서 재정의 된 함수가 있다면 자식의 함수를 실행
void virtual ShowInfo()
{
cout << "교내멤버 정보출력" << endl;
cout << name << id << endl;
}
//가상소멸자가 있어야 동적할당한 메모리 해제할때 자식의 소멸자도 수행
virtual ~SchoolMember()
{
cout << "교내멤버 소멸자" << endl;
}
};
struct Teacher : SchoolMember
{
string subject;
void ShowInfo()
{
cout << "선생 정보출력" << endl;
cout << name << id << subject << endl;
}
Teacher()
{
}
Teacher(string _name, int _id, string _subject) : SchoolMember(_name, _id)
{
subject = _subject;
}
~Teacher()
{
cout << "선생 소멸자" << endl;
}
};
struct Student : SchoolMember
{
int grade;
void ShowInfo()
{
cout << "학생 정보출력" << endl;
cout << name << id << grade << endl;
}
Student()
{
}
Student(string _name, int _id, int _grade) : SchoolMember(_name, _id)
{
grade = _grade;
}
~Student()
{
cout << "학생 소멸자" << endl;
}
};
struct SchoolClass
{
vector<SchoolMember*> classMembers;
Teacher* classTeacher = nullptr;
int studentCount = 0;
void AddTeacher()
{
//nullptr은 포인터변수가 아무것도 가르키고 있지않다는 뜻으로 통용됨
//따라서 해당 if문은 classTeacher가 비어있지 않을 때를 말함.
if (classTeacher != nullptr)
{
cout << classTeacher->name << "담당선생님이 이미 존재합니다" << endl;
return;
}
Teacher* tempPtr = new Teacher;
cout << "담임 선생의 이름을 입력하세요 : " << endl;
cin >> tempPtr->name;
tempPtr->id = 0;
cout << "담당할 과목을 입력하세요 : " << endl;
cin >> tempPtr->subject;
classTeacher = tempPtr;
//선생은 보통 반의 최상단에 위치하므로 push_back이 아닌
//insert를 통해 처음 위치에 추가해줌.
classMembers.insert(classMembers.begin(), classTeacher);
}
void AddStudent(int num)
{
for (int i = 0; i < num; i++)
{
classMembers.push_back(new Student("학생", studentCount, 1));
studentCount++;
}
}
void PrintAttendance()
{
cout << "-------출석부------" << endl;
for (int i = 0; i < classMembers.size(); i++)
{
classMembers[i]->ShowInfo();
}
cout << "-------------------" << endl;
}
void StartStudy()
{
if (classTeacher == nullptr)
{
cout << "선생님이 없어서 수업을 못합니다" << endl;
return;
}
for (int i = 1; i < classMembers.size(); i++)
{
((Student*)classMembers[i])->grade += 1;
}
}
~SchoolClass()
{
for (int i = 0; i < classMembers.size(); i++)
{
delete classMembers[i];
}
}
};
void main()
{
SchoolClass firstClass;
firstClass.AddTeacher();
firstClass.AddStudent(10);
firstClass.PrintAttendance();
firstClass.AddTeacher();
}
728x90
'코딩 1막 <C++개념편> > 코딩 1막 <C++응용편>' 카테고리의 다른 글
[C++] 운송수단을 객체로 구조체를 짜서 상속 및 벡터와 가상함수, 동적할당 쓰기 (0) | 2022.06.15 |
---|---|
[C++] 벡터를 사용해서 인벤토리 생성 (0) | 2022.06.14 |
[C++] 벡터의 기능을 이용해보자 (0) | 2022.06.14 |
[C++] 랜덤한 확률이 조정된 강화를 하는 아이템 생성하기 (0) | 2022.06.14 |
[C++] 생성한 문자열 공백없애는 함수 만들기 (0) | 2022.06.14 |