[C++] 27. 상속의 오버라이딩
2022. 6. 10. 19:08ㆍ코딩 1막 <C++개념편>
728x90
*오버로딩(Overloading) : 같은 이름의 함수(메서드) 여러개를 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술로 다양한 유형의 호출에 응답할 수 있게됩니다.
*오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 것으로 '
' 부모클래스의 메서드는 무시하고, 자식 클래스의 메서드 기능을 사용하겠다'와 같습니다.
#include <iostream>
#include <string>
using namespace std;
// 오버라이딩
// 상위 클래스에 정의된 메서드와 같은 메서드를 하위 클래스에 정의하는 것
// 서드의 내용만 새로 작성하는 것
// 메서드의 선언부는 상위 클래스의 메서드와 완전히 일치해야 한다.
// 즉, 반환형, 메서드명, 매개변수 개수, 매개변수 자료형이 반드시 같아야 한다.
struct SchoolMember
{
string name;
int id;
void SetInfo(string _name, int _id)
{
name = _name;
id = _id;
}
void ShowInfo()
{
cout << "교내 맴버의 정보" << endl;
cout << "이름 : " << name << endl;
cout << "ID : " << id << endl;
}
};
struct Teacher : SchoolMember
{
string 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;
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* schoolMemberPtr;
Teacher* teacherPtr;
Teacher teacherA;
teacherA.SetInfo("선생a", 1, "과학");
Student studentA;
studentA.SetInfo("학생a", 1, 4);
cout << "SchoolMember*의 형태로 해석한 teacherA의 주소" << endl;
schoolMemberPtr = &teacherA; // 업캐스팅
schoolMemberPtr->ShowInfo();
cout << "Teacher*의 형태로 해석한 teacherA의 주소" << endl;
teacherPtr = &teacherA;
teacherPtr->ShowInfo();
// 명시적 형변환을 사용한 다형성
cout << "SchoolMember* 형태를 Teacher* 로 형변환하여 해석한 teacherA의 주소" << endl;
((Teacher*)schoolMemberPtr)->ShowInfo();
}
728x90
'코딩 1막 <C++개념편>' 카테고리의 다른 글
[C++] 29. 문자열: string이란? (0) | 2022.06.14 |
---|---|
[C++] 28. 가상함수 (0) | 2022.06.10 |
[C++] 26. 상속 (0) | 2022.06.10 |
[C++] 25. 동적배열이란 (0) | 2022.06.07 |
[C++] 24. 동적할당이란 (0) | 2022.06.07 |