父类的私有成员父类和子类的继承关系是无法直接调用的这就意味着父类和子类的继承关系只能间接调用父类的私有成员,其途径就是通过父类对父类和子类的继承关系可见的接口比如说protected或者public
接口。以前我以为父类和子类的继承关系是无法使用父类私有成员的这个认识有点片面。
父类和子类的继承關系的对象必然包含父类的对象并且父类的对象成分是在父类和子类的继承关系之前构造完成的。而C++是通过成员初始化列表来完成次任務的如下图所示:
如果你没有在成员初始化列表中显式地调用父类构造函数,它也会调用父类的默认构造函数
此外,父类和子类的继承关系和父类之间还有两个关系
1、父类的指针或者引用可以指向父类和子类的继承关系。有趣的是在这种情况下你用这个指针或者引用嘚成员属于父类如下图所示:
这是为什么?因为C++规定指针或者引用的类型必须与被赋值的类型保持一致
这有什么用?这可以为父类和孓类的继承关系调用父类的成员
形参中有父类指针或者引用的函数既可以供父类对象使用也可以供父类和子类的继承关系对象使用,即父类和子类的继承关系类型可以转化为父类类型
但是父类和子类的继承关系对象不可以赋值给父类对象,如下图所示:
那么用父类和子類的继承关系对象去初始化父类对象的实质是什么呢实质上是用父类和子类的继承关系对象的父类成分而不是全部父类和子类的继承关系对象,去初始化父类对象使用父类的指针或者引用指向父类和子类的继承关系对象也是同理。
它们都用到了COPY赋值操作符或者COPY构造函数因为父类中的形参是父类类型,父类和子类的继承关系类型可以隐式地转换成父类类型参与运算