*Effective C++ 31. Minimize complilation dependencies between files(handle class & interface class)

来源:互联网 发布:拉货软件 编辑:程序博客网 时间:2024/05/16 04:56

I. Handle classes

#include <string>#include <memory>class PersonImpl;class Date;class Address;class Person {public:    Person(const std::string& name, const Date& birthday, const Address& addr);    std::string name() const;    std::string birthDate() const;    std::string address() const;private:    std::tr1::shared_ptr<PersonImpl> pImpl;};
#include "Person.h"#include "PersonImpl.h"class RealPerson;Person::Person(const std::string& name, const Date& birthday, const Address& add): pImpl(new PersonImpl(name, birthday, addr)) { }std::string Person::name const {    return pImpl->name();}std::string Person::name() const {    return pImpl->name();}

clients use them like this

std::string name;Date dateofBirth;Address address;Person pp(name, dataOfBirth, address);std::cout << pp.name() << std::endl;

II. Interface classes

class Person {public:    virtual ~Person();    virtual str::string name() const = 0;    virtual std::string birthData() const = 0;    virtual std::string address() const = 0;    static std::tr1::shared_ptr<Person>        create(const std::string& name, const Date& birthday, const Address& addr);};std::tr1::shared_ptr<Person>     Person::create(const std::string& name, const Date& birthday, const Address& addr) {    return std::tr1::shared_ptr<Person> (new RealPerson(name, birthday, addr);}class RealPerson: public Person {Public:    RealPerson(const std::string& name, const Date& birthday, const Address& addr): theName(name), theBirthday(birthday), theAddress(addr) { }    virtual ~RealPerson() { }    std::string name() const;    std::string birthDate() const;    std::string address() const;private:    std::string theName;    Date theBirthDate;    Address theAddress;};

clients use them like this

std::string name;Date dateofBirth;Address address;std::tr1::shared_ptr<Person>pp (Person::create(name, dataOfBirth, address);std::cout << pp->name() << std::endl;
阅读全文
0 0
原创粉丝点击