ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 가상함수, 추상클래스의 권고 사항
    C++ 2014. 1. 14. 06:01

    추상 클래스란 JAVA에서 많이 사용을 하는데 C++에서는 Pure Virtual Class,

    즉 Class내에 Virtual 함수가 있는 경우를 말한다.

    추상 클래스를 사용하는 이유는 

    1. Base Class에서 인터페이스만를 제공한다. (중요한 개념)

    같이 구현을 하는 경우에 상위 클래스를 설계하는 사람이 상위에서 개념상으로 미리 구현되어야 것을 정의해놓는 것이다. 즉 베이스에서는 멤버함수에 대한 이름만 제공을 하고 상속받는 하위 클래스에서 자기들이 원하는 대로 해당 함수를 Overiding해서 사용하는 것이다. 

    2. 생성자는 필요 없지만 반드시 가상소멸자가 있어야 한다. 


    class Employee
    {
    private:
    //클래스 안의 변수를 private 상속 받은 클래스라도 사용할 수 없도록 함.
    //상속 받은 클래스는 protected까지 접근 허용함.
    const int number;   //사번
    const string name;  //이름
    double salary; //월급
    public:
    Employee(int num, const string& name); //인자있는 생성자를 선언.
    void SetSalary(double s); //월급을 입력함.
    virtual void SetSales(double sale)=0;
    //[순수 가상 함수...!]<- 이게 클래스 안에 한개라도                              //존재한다면 main에서 객체를 선언할 수 없음. 이 클래스 이름을 추상 클래스라고 한다.
    virtual double GetPay() const;
    //가상함수를 사용해서 다른 클래스에서 쓰인 GetPay()와 구별.
    void Print() const;
    };
    Employee::Employee(int num,string str) //생성자를 호출하여 인자를 전달.
    :number(num),name(str)
    {
    }
    void Employee::SetSalary(double s)
    {
    salary = s;
    }
    double Employee::GetPay() const
    {
    return salary*12;
    }
    void Employee::Print() const
    {
    cout<<”사번 : “<<number<<” 이름 : “<<name<<” 연봉 : “<<GetPay()<<”\n”;
    //여기서 쓰인 GetPay()는 밑에 있는 GetPay()를 호출해서 사용함.
    }
    class Salesman : public Employee //Employee를 Salesman 클래스에 상속함.
    {
    private:
    double sales;
    public:
    void SetSales(double sale);
    double GetPay() const; //위의 virtual double GetPay()와 구별….!
    Salesman(int num, string str, double sale);
    };
    Salesman::Salesman(int num, string str, double sale)
    //생성자를 선언해서, Employee를 다시 정의
    :Employee(num,str), sales(sale)
    {
    }
    void Salesman::SetSales(double sale)
    {
    sales = sale;
    }
    double Salesman::GetPay() const
    {
    return Employee::GetPay()+sales*0.2;
    }
    int main()
    {
    Employee *Elist[4];
    //Employee객체를 포인트로 선언~ 추상 클래스는 따로 객체선언 불가!!
    int num;


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

    Friend의 사용시기  (0) 2014.01.14
    Overloading과 Overriding의 차이  (0) 2014.01.14
    const 사용  (0) 2014.01.14
    C++ Object 생성시 주의 사항1  (0) 2014.01.14
    C++ 창시자의 조언  (0) 2014.01.08
Designed by Tistory.