C++ 상속 - private/protected 상속

진경천·2023년 10월 26일
0

C++

목록 보기
55/90

pirvate 상속

is a 관계 : (도형과 원) public 상속
has a 관계 : (사각형과 선분) private 상속
도형 is 원, 사격형 has 선분

#include <iostream>
#include <vector>

using namespace std;

class Queue : private vector<int> {
	// vector를 상속받아 vector 안의 멤버함수를 사용할 수 있다.
public:
	void push(int value) {
		push_back(value);
	}

	void pop() {
		pop_back();
	}

	int top() {
		return back();
	}
};

int main() {
	Queue queue;
	queue.push(10);
	cout << queue.top() << endl;

	queue.push(20);
	cout << queue.top() << endl;

	queue.pop();
	cout << queue.top() << endl;

	return 0;
}
  • 실행 결과

    10
    20
    10

  • vector를 private 상속일때

    사용자가 public으로 정의한 멤버함수만 노출이 된다.
    외부에서 부모의 멤버함수에 접근할 수 없다.
    즉, public과 protected 멤버 함수를 private으로 상속 가능하다.
    protected롷 선언된 함수에 접근해야만 하는 경우에 사용하며 웬만하면 사용하는거 비추

  • vector를 public 상속일때

    부모의 모든 인터페이스를 상속할 수 있다.

protected 상속

같은 패키지 또는 자식 클래스에서 멤버 함수에 접근할 수 있게 해준다.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class Queue : protected vector<int> {
	// vector를 상속받아 vector 안의 멤버함수를 사용할 수 있다.
public:
	virtual void push(int value) {
		push_back(value);
	}

	virtual void pop() {
		pop_back();
	}

	virtual int top() {
		return back();
	}
};

class PriorityQueue : public Queue {
	// 우선 순위 queue
public:
	virtual void push(int value) {
		Queue::push(value);
		push_heap(begin(), end());
	}

	virtual void pop() {
		pop_heap(begin(), end());
		Queue::pop();
	}

	virtual int top() {
		return front();
	}
};

int main() {
	PriorityQueue pq;
	pq.push(10);
	pq.push(100);
	pq.push(0);

	cout << pq.top() << endl;
	pq.pop();

	cout << pq.top() << endl;
	pq.pop();

	cout << pq.top() << endl;
	pq.pop();

	// 높은 수 일 수록 top으로 배치가 됨.

	return 0;
}
  • 실행 결과

    100
    10
    0

protected로 상속을 받아 vector의 멤버함수인 begin()과 end()를 클래스 내에서 사용할 수 있다.

profile
어중이떠중이

0개의 댓글