LANG/C++

[C++]07-1.상속에 들어가기에 앞서

혀니리리 2023. 5. 14. 12:13
728x90
#include <iostream>
using namespace std;

class PermanentWorker
{
private:
    char name[100];
    int salary;
public:
    PermanentWorker(char *name, int money)
        :salary(money)
    {
        strcpy(this->name, name);
    }
    int GetPay() const
    {
        return salary;
    }
    void ShowSalaryInfo() const
    {
        cout << "name: " <<name << endl;
        cout << "salary: " <<GetPay() <<endl <<endl;
    }
}

class EmployeeHandler
{
private:
    PermanentWorker* empList[50];
    int empNum;
public:
    EmployeeHandler() :empNum(0)
    {}
    void AddEmployee(PermanentWorker* emp)
    {
        empList[empNum++] = emp;
    }
    void ShowAllSalaryInfo() const
    {
        for(int i = 0; < empNum; i++)
            empList[i]->ShowSalaryInfo();
    }
    void ShowTotalSalary() const
    {
        int sum = 0;
        for(int i = 0; i< empNum; i++)
            sum+=empList[i]->GetPay();
        cout <<"salary sum: " <<sum << endl;
    }
    ~EmployeeHandler()
    {
        for(int i = 0;i<empNum;i++)
            delete empList[i];
    }
}

* PermanentWorker: 데이터적 성격이 강함

*EmployeeHandler: 기능적 성격이 강함

 

*새로운 직원정보의 등록 - AddEmployee

*모든 직원의 이번 달 급여정보 출력 - ShowAllSalaryInfo

*이번 달 급여의 총액 출력 - ShowTotalSalary

=>이렇게 기능의 처리를 실제로 담당하는 클래스를 가리켜 '컨트롤 클래스' or 핸들러클래스 라고 함.

 

 

우리는 이제

'요구사항이 변경에 대응하는 프로그램의 유연성', '기능의 추가에 따른 프로그램의 확장성'을 고려하여 만들어야 함

위의 코드에서 영업직, 임시직을 포함하면 모든 코드를 뜯어고쳐야 함

상속을 제대로 이해한다면 EmployeeHandler를 하나도 고치지 않아도 됨.

728x90