0%

the transformation from derived class to base class

派生类向基类转换的可访问性主要有如下三种:
1. 当D共有继承B时,用户代码才能使用派生类向基类的转换。
此处理解关键是用户代码

1
2
3
4
5
class sample : public sample_base{
//member
};
sample s1;
sample_base *s2=&s1;
用户代码即最后2行。

  1. 无论D什么方式继承B,D的成员函数和友元都能使用派生类像基类转换

    1
    2
    3
    4
    5
    6
    7
    8
    9
    class D : public B{
    void func{
    //member function
    }
    friend void func_frid();
    };
    void D::func_frid(){
    //functions
    }
    此时成员函数为func,而友元为func_frid()

  2. 如果D继承自B的方式是公有有或者受保护,则D的派生类成员和友元可以使用D向B的类型转换。
    此处的主要矛盾转换向了D派生类的(成员和友元),也就是说变成了派生再派生

    1
    2
    3
    4
    5
    6
    class D : protected B{
    //members
    };
    class E : public D{
    //members
    };
    此时的E中可以使用转换