C++

C++ 상속 관계 구조 구현 (학생 예제)

pepega 2021. 10. 21. 16:38

 

#include <iostream>
#include <stdlib.h>
#include <cstring>
#include <string.h> // 배열 5개만

using namespace std;

class Student
{
private:
    char *student_name; //학생 이름 변수
    int computer_grade;
    
public:
    Student() {}
    
    Student(const char *_student_name, const int _computer_grade) //이름 입력받기 위한 생성자
    {
        student_name = new char[strlen(_student_name) + 1]; //NULL문자 포함한 배열 선언
        strcpy(student_name, _student_name); //student_name _student_name 입력
        //cout << "생성자 호출" << endl;
        
        computer_grade = _computer_grade; //성적 입력
    }
    
    ~Student() {}
    
    virtual char *getName()
    {
        return student_name;
    }
    
    virtual int getAverage()
    {
        return computer_grade;
    }
    
    virtual void setGrade(int grade)
    {
        cout << "컴퓨터 성적 변경!" << endl;
        computer_grade = grade;
    }
};

class Science : public Student //부모 클래스 상속받음
{
private:
    int science_grade;
    
public:
    Science(const char *_student_name, const int _computer_grade, int _science_grade) : Student(_student_name, _computer_grade) //과학점수 입력
    {
        science_grade = _science_grade;
    }
    ~Science() {}
    
    int getAverage()
    {
        return (Student::getAverage() + science_grade) / 2;
    }
    
    void setGrade(int grade)
    {
        cout << "과학 성적 변경!" << endl;
        science_grade = grade;
    }
};

class LiberalArts : public Student //부모 클래스 상속받음
{
private:
    int liberalarts_grade;
    
public:
    LiberalArts(const char *_student_name, const int _computer_grade, int _liberalarts_grade) : Student(_student_name, _computer_grade) //사회점수 입력
    {
        liberalarts_grade = _liberalarts_grade;
    }
    ~LiberalArts() {}

    int getAverage()
    {
        return (Student::getAverage() + liberalarts_grade) / 2;
    }
    
    void setGrade(int grade)
    {
        cout << "사회 성적 변경!" << endl;
        liberalarts_grade = grade;
    }
};

int main()
{
    Student *student_List[5];
    
    //Car *carList = new Car[5];
    
    student_List[0] = new Student("짱구", 25);  //부모 클래스 호출
    student_List[1] = new Science("주희", 100, 50); //자식 클래스 호출
    student_List[2] = new LiberalArts("김영주", 37, 61);
    student_List[3] = new Science("엽기동", 100, 100);
    student_List[4] = new LiberalArts("강석찬", 10, 20);
    
    for(int i = 0; i < 5; i++) //모든 배열 출력
    {
        Student *p = student_List[i]; //p안에 클래스 함수 입력
        cout << "이름 : " << p->getName() << endl; //각 클래스의 이름 호출
        cout << "평균 : " << p->getAverage() << endl;
        p->setGrade(50);
        cout << "바뀐 평균 : " << p->getAverage() << endl;
        cout << endl;
    }
    
    return 0;
}

 

'C++' 카테고리의 다른 글

C++ 정적바인딩, 동적바인딩  (0) 2021.10.21
C++ 클래스 구현, 상속, 자동차 예제  (0) 2021.10.21