ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C++ public 다형 상속
    C++ 2025. 3. 31. 15:24
    #include <iostream>
    #ifndef TIMEH
    #define TIMEH
    
    class Time
    {
    private:
    	int hours;
    	int mins;
    
    public:
    	Time();
    	Time(int, int);
    	void addHours(int);
    	void addMins(int);
    	Time operator+(Time&);
    	Time operator*(int );
    	void show();
    	~Time();
    	friend Time operator*(int n, Time& t) {
    		return t * n;
    	}
    	friend std::ostream& operator<<(std::ostream& os, Time& t);
    };
    
    class NewTime : public Time {
    private:
    	int day;
    public:
    	NewTime();
    	NewTime(int, int, int);
    	void print();
    };
    #endif

    NewTime 클래스는 Time 클래스의 상속을 받은 클래스이다.

    NewTime 클래스에선 private 영역에 선언돼있는 hours 와 mins를 직접적으로는 사용할 수 없다.

    public영역에 선언되어있는 함수를 호출해서 값을 사용할 수 있다.

    여기선 print함수를 사용하지않고 show를 재정의하여 가상메서드를 사용하겠다.

    void NewTime::show() {
    	std::cout << "일 : " << day << std::endl;
    	show(); // 재귀호출
    }

    show는 NewTime클래스의 함수이므로 Time영역에 접근할 수 없다.

    Time에서 public 영역에 함수를 만들어주어야 한다.

    	int getHours() {
    		return hours;
    	}
    	int getMins() {
    		return mins;
    	}
    void Time::show() {
    	cout <<  "시간: " << hours << endl;
    	cout << "분: " << mins << endl;
    }
    
    void NewTime::show() {
    	std::cout << "일 : " << day << std::endl;
    	std::cout << "시간 : " << getHours() << std::endl;
    	std::cout << "분 : " << getMins() << std::endl;
    }

    이제 show 함수는 Time 클래스에서 사용될때와 NewTime 클래스에서 사용될 때 다른 결과값을 출력할 수 있다.

    virtual이라는 가상키워드가 붙으면 가상 메서드가 되는데 서로 독립된 메서드가 있다는것을 알려준다.

    앞서 show함수 앞에 virtual을 붙였기때문에 상황에 맞게 Time클래스또는 NewTime클래스에서 사용한다.

    1. 기초 클래스에서 가상메서드를 선언하면, 그 함수는 기초 클래스 및 파생되는 클래스에서 모두 가상이 된다.
    2. 객체에 대한 참조를 사용하여, 객체를 지시하는 포인터를 사용하여 가상 메서드가 호출되면
    참조나 포인터를 위해 정의된 메서드를 사용하지 않고 객체형을 위해 정의된 메서드를 사용한다.
    3. 상속을 위해 기초 클래스로 사용할 클래스를 정의할 때, 
    파생 클래스에서 다시 정의해야 되는 클래스 메서드들은 가상 함수로 선언해야 한다.

     

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

    C++ 상속  (0) 2025.03.30
    C++ 연산자 오버로딩  (0) 2025.03.29
    C++ 생성자와 소멸자  (0) 2025.03.29
    C++ 추상화와 클래스  (1) 2025.03.28
    C++ 분할 컴파일  (0) 2025.03.27
Designed by Tistory.