使用私有继承,那么基类的共有成员和保护成员都成了派生类的私有成员,基类的公有方法 将成为 派生类的私有方法
一个私有继承的例子
class STUDENT : private std::string, private std::valarray<double>
{
};
一个Student类 私有继承了 string 和 valarray
这个私有继承 提供了两个无名的子对象成员
那么对于私有继承,我们如何用构造函数进行初始化呢?
class STUDENT : private std::string, private std::valarray<double>
{
public:
STUDENT(const std::string& a , int n);
};
STUDENT::STUDENT(const std::string& a, int n) :std::string(a),
std::valarray<double>(n)
{
}
我们是用初始化列表 + 类名来 进行构造函数,而不是成员名,因为他两是无名成员
如何访问基类的方法呢
被私有继承后,基类的公有成员,保护成员都成了派生类的私有成员,
所以只能在派生类的方法中使用基类的方法
class STUDENT : private std::string, private std::valarray<double>
{
typedef std::valarray<double> ArrayDb;
public:
STUDENT(const std::string& a , int n);
int StrSize(void) const;
};
int STUDENT::StrSize(void) const
{
return std::string::size();
}
使用类名+作用于解析运算符 来进行访问 基类的方法
如何访问基类本身
答案是 使用强制类型转化
std::string str = "zhu";
STUDENT a(str, 10);
std::cout << (std::string &)a << std::endl;