inrcl
inrcl
手把手教你写bug
在类继承时不公开的后果
class QueryBase;                     //抽象基类
class BinaryQuery: public QueryBase;//抽象基类
class AndQuery: BinaryQuery;        //未加public 访问修饰符
/* shared_ptr 支持派生类向基类的类型转换,
shared_ptr<QueryBase>可以绑定到AndQuery* 上 */
//将派生类对象绑定到基类的指针上
shared_ptr<QueryBase>(new AndQuery(lhs, rhs));
http://inrcl.cn/wp-content/uploads/2020/04/批注-2020-04-01-193016-1024x679.jpg
对应下面第三条, 类的派生类的成员角度
http://inrcl.cn/wp-content/uploads/2020/04/批注-2020-04-01-193134.jpg
http://inrcl.cn/wp-content/uploads/2020/04/批注-2020-04-01-193209.jpg

派生类向基类转换的可访问性

派生类向基类的转换是否可以访问由使用该转换的代码决定,同时派生类的派生访问说明符也会有影响。假定D继承自B:

1> 只有当D共有的继承B时,用户代码才能使用派生类向基类的转换;如果D继承B的方式是受保护的或私有的,则用户代码不能使用该转换。

2> 无论D以什么方式继承B,D的成员函数和友元都能使用派生类向基类的转换;派生类向其直接基类的类型转换对于派生类的成员和友元来说永远是可以访问的。

3> 如果D继承B的方式是公有的或是受保护的,则D的派生类的成员(注①)和友元可以使用D向B的类型转换;反之,如果D继承B的方式是私有的,则不能使用。

注①:“ D的派生类的成员 ” 字面意思 继承自D的派生类对象。

注②:三点说明分别对应在用户代码、类设计者、类的派生类的成员和友元角度使用派生类向基类的转换。

注③:class声明的类不写访问说明符时默认是private,struct声明的类默认public。

anyShare分享到:

发表评论

textsms
account_circle
email

inrcl

手把手教你写bug
震惊—— 一个单词引发的血案,在类继承时不公开的后果
扫描二维码继续阅读
2020-04-01