将文件间的编译依存关系降至最低
1.handle方法:
第二种:interface方法:
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 ;
}