*Effective C++ 31. Minimize complilation dependencies between files(handle class & interface class)
2017-10-31 09:57
501 查看
I. Handle classes
clients use them like this
II. Interface classes
clients use them like this
#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< a86f /span> 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;
相关文章推荐
- Item31: Minimize compilation dependencies between files.(Effective C++)
- 条款31:将文件间的编译依存关系降至最低(Minimize compilation dependencies between files)
- Summary: Arrays vs. Collections && The differences between Collection Interface and Collections Class
- Effectiv C++条款31 将文件间的编译依存关系降至最低 Handle Class和Interface Class完整实现
- Question 31: A C++ developer wants to handle a static_cast() operation for the class String shown below. Which of the following
- Effectiv C++条款31 将文件间的编译依存关系降至最低 Handle Class和Interface Class完整实现
- Effective C++ Item 34 Differentiate between inheritance of interface and inheritance of implementation
- Effectiv C++条款31 将文件间的编译依存关系降至最低 Handle Class和Interface Class完整实现
- 面向对象程序设计-C++ Class & Object & Friend Function & Constructor & Destructor【第五次上课笔记】
- 错误:Interop type 'ADOX.CatalogClass' cannot be embedded. Use the applicable interface instead
- C++中的Object, Class & Instance
- &lt;More Effective C++&gt;笔记--异常
- <<Effective c++>>读书笔记---条款19:设计class犹如设计type
- Effective C++ (5) 几个关于数组的问题
- Difference between Abstract Class and Interface in Java
- c++ 头文件包含问题-include&class
- <<Effective C++>>笔记3
- MATLAB中feval、class、'function_handle'、isa、strcmp的用法
- More Effective C++(条款7:千万不要重载&&,||,和,操作符)
- More Effective C++----(7)不要重载"&&"、"||"、","