[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