文章目录
- 包含和私有继承的关系
- 构造函数初始化的不同
- 使用包含还是私有继承
c++ 面向对象的过程中, 包含和 私有继承都可以实现has-a的关系,下面我们来讨论一下啥时候用包含,啥时候用私有继承
包含和私有继承的关系
- 包含将对象作为一个命名的成员对象添加到类中,而私有集成将对象作为一个未被命名的继承对象添加到类中
- 我们称通过包含或者继承而来的对象为术语子对象(subobject)
- 私有继承提供的特性和包含相同
- 获得实现
- 不获得接口
构造函数初始化的不同
包含的类的写法
class Student{
private:
string name; //use a string object for name
valarray<double> scores; //use a val
}
私有继承的类的写法
class Student : private std::string,private std::valarray<double>{
public:
……
}
使用包含还是私有继承
由于既可以使用包含,也可以使用使用私有继承来建立has-a关系,那么我们应该使用哪一种方式呢?
答案是:包含
包含相对于继承的优点
包含相对于继承的缺点
总而言之:一般情况下应该使用包含实现has-a关系,如果新类需要访问原有类的保护函数,或需要重新定义虚函数,则应使用私有继承