这一部分是从侯捷老师的视频学来的,我运用还不是很熟练,主要意思是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;
}