c++代码重用之私有继承

来源:互联网 发布:服装销售软件 编辑:程序博客网 时间:2024/06/03 23:46

在C++has-a关系中,还有一种实现途径叫—私有继承。
使用私有继承,基类的共有成员和保护成员都成派生类的私有成员,虽然基类方法因此不会成为派生对象共有接口的一部分,但可以在派生类的成员函数中使用它们。派生类不继承基类的接口。
1、初始化基类组件
隐式的继承组件而不是成员对象将影响代码的编写,例如

Student(const char *str,const double *pd,int n)        :name(str),scores(pd,n){}

对于继承类,再使用成员初始化列表的时候使用的是类名,而不是成员名

Student(const char *str,const double *pd,int n)        :std::string(str),ArrayDb(pd,n){}

上述是从String类派生出Student类,Student方法可以使用String方法来访问String组件。
2、访问基类的方法
在私有继承中,只能在派生类的方法中使用基类的方法,和包含这种has-a关系不同的是包含是使用对象名来调用基类方法,而私有继承是使用类名和作用于域解析运算符来调用方法。
3、访问基类对象
通过上面总结我们可以看到使用类名或 作用域解析运算符可以调用基类方法,那么,如果要调用基类的对象呢?
答案是使用强制类型转换。
4、访问基类的友元函数
因为友元不属于类,所以不能用类名显示地限定函数名来访问基类的友元函数,但是可以通过显式的转换为基类来调用正确的函数。例如

ostream & operator<<(ostream & os,const Student & stu){   os<<"Scores for"<<(const String &)stu<<":\n";   }