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
사용자가 public으로 정의한 멤버함수만 노출이 된다.
외부에서 부모의 멤버함수에 접근할 수 없다.
즉, public과 protected 멤버 함수를 private으로 상속 가능하다.
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()를 클래스 내에서 사용할 수 있다.