[C++] 28. 가상함수
2022. 6. 10. 19:43ㆍ코딩 1막 <C++개념편>
728x90
#include <iostream>
#include <string>
using namespace std;
// 가상함수(virtual method)
// 가상함수는 부모 클래스에서 상속받을 클래스에서 재정의할 것으로 기대하고 정의해놓은 함수
// virtual이라는 예약어를 함수 앞에 붙여서 생성할 수 있다
// 이렇게 생성된 가상함수는 파생 클래스에서 재정의하면 이전에 정의되었던 내용들은 모두 새롭게 정의된 내용들로 교체됩니다.
struct SchoolMember
{
string name;
int id;
SchoolMember()
{
}
SchoolMember(string _name, int _id)
{
name = _name;
id = _id;
}
void SetInfo(string _name, int _id)
{
name = _name;
id = _id;
}
// virtual showinfo()
void virtual ShowInfo()
{
cout << "교내 맴버의 정보" << endl;
cout << "이름 : " << name << endl;
cout << "ID : " << id << endl;
}
};
struct Teacher : SchoolMember
{
string subject;
Teacher()
{
}
Teacher(string _name, int _id, string _subject) : SchoolMember(_name, _id)
{
subject = _subject;
}
void SetInfo(string _name, int _id, string _subject)
{
name = _name;
id = _id;
subject = _subject;
}
void ShowInfo()
{
cout << "선생의 정보" << endl;
cout << "이름 : " << name << endl;
cout << "교번 : " << id << endl;
cout << "담당과목 : " << subject << endl;
}
void Teach()
{
cout << name << "선생이" << subject << "를 가르친다" << endl;
}
};
struct Student : SchoolMember
{
int grade;
Student()
{
}
Student(string _name, int _id, int _grade) : SchoolMember(_name, _id)
{
grade = _grade;
}
void SetInfo(string _name, int _id, int _grade)
{
name = _name;
id = _id;
grade = _grade;
}
void ShowInfo()
{
cout << "학생의 정보" << endl;
cout << "이름 : " << name << endl;
cout << "학번 : " << id << endl;
cout << "학년 : " << grade << endl;
}
void Study()
{
cout << name << "학생이 공부한다" << endl;
}
};
void main()
{
SchoolMember* schoolMembers[4];
// 동적할당 -> 생성자와 오버로딩생성자를 만들어줘야함
Teacher* teacherA = new Teacher("선생a", 0, "물리");
Teacher* teacherB = new Teacher("선생b", 1, "수학");
Student* studentA = new Student("학생a", 0, 2);
Student* studentB = new Student("학생b", 1, 4);
schoolMembers[0] = teacherA;
schoolMembers[1] = studentA;
schoolMembers[2] = teacherB;
schoolMembers[3] = studentB;
for (int i = 0; i < 4; i++)
{
schoolMembers[i]->ShowInfo();
}
}
* 동적할당부터 생성자, 오버로딩생성자, 오버라이딩, 상속, 가상함수까지 다양한 개념들이 녹아있는 유형이다
* 소스코드를 보고 한문장 한문장 어떤 내용인지 숙지하자!
728x90
'코딩 1막 <C++개념편>' 카테고리의 다른 글
[C++] 30. 벡터(vector)란 무엇인가? (0) | 2022.06.14 |
---|---|
[C++] 29. 문자열: string이란? (0) | 2022.06.14 |
[C++] 27. 상속의 오버라이딩 (0) | 2022.06.10 |
[C++] 26. 상속 (0) | 2022.06.10 |
[C++] 25. 동적배열이란 (0) | 2022.06.07 |