C++:私有继承与接口实现工厂函数的复用策略

需积分: 50 3 下载量 195 浏览量 更新于2024-09-10 收藏 38KB DOC 举报
"在C++中,私有(private)继承和接口类的巧妙结合可以实现高效的类复用和工厂函数的设计。本文主要讨论如何通过创建一个接口类IPerson,比如定义成员函数如`name()`和`birthDate()`,来规范一个对象的行为。然后,通过私有继承一个具体类PersonInfo,并公有继承接口类,允许对PersonInfo进行扩展,满足接口的需求。 具体来说,首先定义一个数据库标识DatabaseID,包含姓名(name)和出生日期(birthDate)的数据结构。接着,我们定义一个抽象的接口类IPerson,它包含了两个纯虚函数,这两个函数用于获取个人的名字和出生日期。这样,任何继承自IPerson的类都必须提供这两个方法的具体实现。 然后,我们创建了一个名为PersonInfo的类,这个类私有地继承自DatabaseID,这意味着我们可以在内部直接访问DatabaseID的成员,但外部无法直接实例化或修改。PersonInfo类通过构造函数将DatabaseID中的数据复制到自身,提供了名字和出生日期的访问方式,同时实现了IPerson接口中的theName()和theBirthDate()函数。 工厂函数的引入使得代码更加模块化。例如,`DatabaseIDAskUserForDatabaseID()`函数可以从用户那里获取数据库ID,然后`makePerson(DatabaseID personIdentifier)`函数会根据这个ID创建一个IPerson类型的对象,实际上是通过PersonInfo类的实例化来完成的。这样,即使将来需要更改PersonInfo的具体实现(例如添加额外属性或行为),只要保持对IPerson接口的兼容性,就不会影响到使用工厂函数的地方。 总结起来,通过私有继承和接口类的使用,我们可以实现代码的高内聚和低耦合,提高代码的复用性和灵活性,同时确保了代码的可维护性和扩展性。这是一种常见的设计模式,适用于许多C++项目,特别是当需要创建一组行为类似但细节各异的对象时。"