
派生类向基类转换的可访问性主要有如下三种:
1. 当D共有继承B时,用户代码才能使用派生类向基类的转换。
此处理解关键是用户代码
用户代码即最后2行。1
2
3
4
5class sample : public sample_base{
//member
};
sample s1;
sample_base *s2=&s1;
无论D什么方式继承B,D的成员函数和友元都能使用派生类像基类转换
此时成员函数为func,而友元为func_frid()1
2
3
4
5
6
7
8
9class D : public B{
void func{
//member function
}
friend void func_frid();
};
void D::func_frid(){
//functions
}如果D继承自B的方式是公有有或者受保护,则D的派生类成员和友元可以使用D向B的类型转换。
此处的主要矛盾转换向了D派生类的(成员和友元)
,也就是说变成了派生再派生此时的E中可以使用转换1
2
3
4
5
6class D : protected B{
//members
};
class E : public D{
//members
};