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

来源:互联网 发布:剑三正太脸型喵太数据 编辑:程序博客网 时间:2024/05/17 00:03
将文件间的编译依存关系降至最低
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 ;}