component設計模式
阿新 • • 發佈:2019-01-27
這一部分是從侯捷老師的視訊學來的,我運用還不是很熟練,主要意思是composite類既要能夠呼叫primitive類也要能呼叫本身,解決的辦法是,讓這兩個類共同繼承父類component,父類指標可以指向子類,但子類不能指向父類。
#include<iostream>
#include<vector>
using namespace std;
class component {
int value;
public:
component(int val) { value = val; }
virtual void add(component *){}
int print() {
return value;
}
};
class primitive :public component{
public :
primitive(int val) :component(val) {}
};
class composite :public component {
vector<component*>c;
public:
composite(int val):component(val){}
void add(component *elem) {
c.push_back(elem);
}
void print() {
for (auto iter : c)
cout << iter->print()<<" ";
}
};
int main(void) {
primitive *pr = new primitive(10);
composite c(12);
composite *cr = &c;
c.add(pr);
c.add(cr);
c.print();
return 0;
}