[C++] 구조체 만들고, 상속해보고, 오버로딩, 오버라이딩 및 가상함수 구현해보기
2022. 6. 10. 21:05ㆍ코딩 1막 <C++개념편>/코딩 1막 <C++응용편>
728x90
#include <iostream>
#include <string>
using namespace std;
// 1. 부모구조체 : Family / 자식구조체 : Parents, Child 만들고 상속
struct Family
{
string name;
int age;
Family()
{
}
Family(string _name, int _age)
{
name = _name;
age = _age;
}
void SetInfo(string _name, int _age)
{
name = _name;
age = _age;
}
// 6. 부모의 멤버함수에 virtual 키워드를 붙여 가상함수로 만든 뒤 다시 호출
void virtual ShowInfo()
{
cout << "가족 맴버의 정보" << endl;
cout << "이름 : " << name << endl;
cout << "나이 : " << age << endl;
}
};
struct Parents : Family
{
string job;
Parents()
{
}
// 2. 생성자 오버로딩을 구현하고 부모생성자 호출하여 초기화
Parents(string _name, int _age, string _job) : Family(_name, _age)
{
job = _job;
}
void ShowInfo()
{
cout << "이름 : " << name << endl;
cout << "나이 : " << age << endl;
cout << "직업 : " << job << endl;
}
void SetInfo(string _name, int _age, string _job)
{
name = _name;
age = _age;
job = _job;
}
};
struct Child : Family
{
string isSchool;
Child()
{
}
// 2. 생성자 오버로딩을 구현하고 부모생성자 호출하여 초기화
Child(string _name, int _age, string _isSchool) : Family(_name, _age)
{
name = _name;
age = _age;
isSchool = _isSchool;
}
void ShowInfo()
{
cout << "이름 : " << name << endl;
cout << "나이 : " << age << endl;
cout << "학교유무 : " << isSchool << endl;
}
void SetInfo(string _name, int _age, string _isSchool)
{
name = _name;
age = _age;
isSchool = _isSchool;
}
};
void main()
{
// 3. 부모 및 자식의 포인터 변수 선언
Family* familysPtr;
Parents* parentsPtr;
Child* childsPtr;
Family* familys[5];
familys[0] = new Parents("오명섭", 58, "농부");
familys[1] = new Parents("양정순", 56, "간호공무원");
familys[2] = new Child("오상현", 28, "대졸");
familys[3] = new Child("오지연", 27, "대졸");
familys[4] = new Child("오재권", 25, "대재");
// 5. 포인터변수를 통해 멤버함수(ShowInfo)를 호출
for (int i = 0; i < 5; i++)
{
familys[i]->ShowInfo();
}
cout << endl << endl;
// 4. 자식의 변수를 하나 선언하여, 그 주소를 부모의 포인터변수에 넣을것(업캐스팅)
cout << "Family*의 형태로 해석한 parentsA의 주소" << endl;
familysPtr = familys[0];
familysPtr->ShowInfo();
cout << endl;
// 명시적 형변환을 사용한 다형성
cout << "Family* 형태를 Parents* 로 형변환하여 해석한 teacherA의 주소" << endl;
((Parents*)familysPtr)->ShowInfo();
}
728x90
'코딩 1막 <C++개념편> > 코딩 1막 <C++응용편>' 카테고리의 다른 글
[C++] 생성한 문자열 공백없애는 함수 만들기 (0) | 2022.06.14 |
---|---|
[C++] 가상함수를 써서 플레이어를 생성하는 함수를 호출해보자 (0) | 2022.06.13 |
[C++] 상속 : 부모 몬스터 <--- 자식 드래곤 (0) | 2022.06.10 |
[C++] 동적할당을 써서 별찍기, 배수의 배열 그리고 배열범위 넓히기★ (0) | 2022.06.07 |
[C++] 구조체 변수의 동적할당과 해제 (0) | 2022.06.07 |