//基类:Item
class Item{
public:
Item* source;
Item (Item* src) {source=src;}
virtual int out() {return 0;}
};
//计数器类:Counter
class Counter: public Item{
int value;
public:
int out() {return value++;}
Counter(int v):Item(0){value=v;}
};
//过滤器类:Filter
class Filter:public Item{
int factor;
public:
int out(){
while(1){
int n=source->out();
if (n%factor) return n;
}
}
Filter(Item *src, int f):Item(src) {factor=f;}
};
//筛子类:Sieve
class Sieve: public Item{
public:
int out(){
int n=source->out();
source= new Filter(source, n);
return n;
}
Sieve(Item *src):Item(src){}
};
//主函数,构造类的对象演绎应用场景
void main(){
Counter c(2);
Sieve s(&c);
int next, n;
cin>>n;
while(1){
next=s.out();//关键代码只有一行,类知道自己的职责
if(next>n) break;
cout<
}
cout<
}