Prototype 模式

来源:互联网 发布:js设置style属性 编辑:程序博客网 时间:2024/05/26 22:07

CCK上说:
“必须对正在处理的对象的精确类型保持‘不知情’,并且不希望改变被克隆的原始对象,也不希望受原始对象改变的影响。”


#include 
<iostream>
#include 
<string>
using namespace std;

class Expr
{
public:
    Expr()
{}
    Expr(
const string str_,const int i):str(str_),r(i){}
    Expr(
const Expr& rhs):str(rhs.str),r(rhs.r){}
    
virtual ~Expr(){}
    
virtual void Initialize(const string& cstr, int cer )
    
{
        str 
= cstr;
        r   
= cer;
    }

    
    
virtual Expr* new_expr()
    
{
        
return new Expr();
    }

    
virtual Expr* clone()
    
{
        
return new Expr(*this);
    }

private:
    
string str;
    
int r;
}
;
class Cond : public Expr
{
public:
    Cond()
{}
    Cond(
const string& ms, const int t):Expr(ms, t){};
    Cond(
const Cond& rth):Expr(){}
    
~Cond(){}
    
virtual void Initialize(const string& str, const int i)
    
{
        Expr::Initialize(str, i);
        cout
<<"Initialize success!"<<endl;
    }

    Cond
* new_Cond()
    
{
        
return new Cond();
    }

    Cond
* clone()
    
{
        
return new Cond(*this);
    }

}
;

int main()
{   
    Cond cond;
    Cond
* p =  cond.new_Cond();
    p
->Initialize("hello",3);
    Cond bcond(
"bird",5);
    Cond
* pt = bcond.clone();
    delete p;
    delete pt;
    
    
return 0;
}
 
原创粉丝点击