条款31将文件间的编译依存关系降至最低

97 篇文章 0 订阅
3 篇文章 0 订阅
将文件间的编译依存关系降至最低
1.handle方法:
class Date{
public:
    Date(int a):date(a){}
private:
    int date;
};
class PersonImpl;
class Person{
public:
      Person(const string &name,const Date &birthday);
      string name() const;
private:
      tr1::shared_ptr<PersonImpl> pImpl;
};
class PersonImpl{
public:
    PersonImpl(const string &name,const Date &birthday):theName(name),theBirthday(birthday){}
     string name() const
     {
         return theName;
     }
private:
    string theName;
    Date theBirthday;
};
Person::Person(const string &name,const Date &birthday):pImpl(new PersonImpl(name,birthday)){}
string Person::name() const
{
    return pImpl->name();
}
int main()
{
    Date bir(4);
    const string s="daizhou";
    Person pc(s,bir);
    cout<<pc.name();
    return 0 ;
}


第二种:interface方法:
class Person{
public:
     virtual ~Person(){}
     virtual string name() const=0;
     static tr1::shared_ptr<Person> create(const string &name);
};
class RealPerson:public Person{
public:
    RealPerson(const string &name):theName(name){}
    virtual ~RealPerson(){}
    string name() const
    {
    return theName;
    }
private:
    string theName;

};
tr1::shared_ptr<Person> Person::create(const string &name)
{
    return tr1::shared_ptr<Person>(new RealPerson(name));
}
int main()
{
    const string s="daizhou";
   tr1::shared_ptr<Person> pp(Person::create(s));
   cout<<pp->name()<<endl;
    return 0 ;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值