1. virtual을 부모클래스에 있는 함수에 써서 자식클래스에서 오버라이딩하는 연습을 했다.
2. 포인터 배열에 객체를 동적할당 후, 동적할당한 그 객체의 함수를 써보았다.
3. 클래스, 객체는 구조체과 같게 메모리의 크기가 있다. 그건 구조체와 마찬가지로 변수의 크기다. 그리고 클래스 안에있는 함수와 변수는 서로 다른 메모리에 할당된다.
4. 예를들어 멤버변수가 char, int 순으로 선언이 되어있다면 총 8바이트메모리가 소요된다. 그리고 함수에 virtual이 있다면 객체에서 포인터변수를 사용해야하므로 4바이트가 할당되야해서 총 12바이트가 할당된다.
#include <stdio.h>
#pragma warning(disable:4996)
class Person
{
protected:
char m_name[30] = { 0, };
int m_birthday = 0;
public:
Person()
{
printf("Person 객체 생성자가 성공적으로 실행되었습니다.\n");
}
Person(char* str, int a)
{
m_name[0] = *str;
m_birthday = a;
printf("매개변수가 있는 Person 객체 생성자가 성공적으로 실행되었습니다.\n");
}
virtual void InputData()
{
printf("이름 : ");
scanf("%s", m_name);
printf("생년월일 : ");
scanf("%d", &m_birthday);
}
virtual void Show()
{
printf("이름 : %s\n", m_name);
printf("생년월일 : %d\n", m_birthday);
}
};
class Student : public Person
{
private:
char m_school_name[30] = { 0, };
int m_class = 0;
public:
Student()
{
printf("Student 객체 생성자가 성공적으로 실행되었습니다.\n");
}
Student(char* str, int a_value)
{
m_school_name[0] = *str;
m_class = a_value;
}
void InputData()
{
printf("학교 이름 : ");
scanf("%s", m_school_name);
printf("학년 : ");
scanf("%d",&m_class);
}
void Show()
{
printf("학교이름 : %s\n", m_school_name);
printf("학년 : %d\n", m_class);
}
};
//다형성사용을 위해 두 클래스에서 쓸 수 있는 전역함수를 만들고 싶었음
//InputData(&)로 부모든 자식이든 쓸 수 있도록
//void InputData(Person* ptr)
//{
// ptr = new Person;
// printf("이름 : ");
// scanf("%s", ptr->InputData());
// printf("생년월일 : ")
//}
typedef Person* PtrPerson;
void main()
{
PtrPerson go_list[2];
go_list[0] = new Person;
go_list[1] = new Student;
for (int i = 0; i < 2; i++) {
go_list[i]->InputData();
}
printf("What u written is ...\n");
for (int i = 0; i < 2; i++) {
go_list[i]->Show();
}
for (int i = 0; i < 2; i++) {
delete go_list[i];
}
}
'C, C++' 카테고리의 다른 글
2차원 메모리 동적할당 (C++) (0) | 2020.08.27 |
---|---|
다형성(Polymorphism) (0) | 2020.08.25 |
레이달리오 올웨더포트폴리오(2) (0) | 2020.08.23 |
레이달리오 올웨더포트폴리오(1) (0) | 2020.08.23 |
도서대여프로그램 with C (0) | 2020.08.21 |
댓글