访问控制与继承

来源:互联网 发布:淘宝卖家子账号在哪里 编辑:程序博客网 时间:2024/05/18 17:43

每个类分别控制自己的成员初始化过程,与之类似,每个类还分别控制着其成员对于派生类来说是否可访问

受保护的成员
一个类使用protected关键字来声明那些它希望与派生类分离但是不想被其他公共访问使用的成员。
1。和私有成员类似,受保护的成员对于类的用户来说是不可访问的。
2。和公有成员类似,受保护的成员对于派生类的成员和友元来说是可访问的。
3。派生类的成员或友元只能通过派生类对象来访问基类的受保护成员。派生类对于一个基类对象中的受保护成员没有任何访问特权。

派生类的成员和友元只能访问派生类对象中的基类部分的受保护成员;对于普通的基类对象中的成员不具有特殊的访问权限。

公有、私有和受保护继承
某个类对其继承而来的成员的访问权限受到两个因素影响:一是在基类中该成员的访问说明符,二是在派生类的派生列表中的访问说明符。
派生访问说明符对于派生类的成员(及友元)能否访问其直接基类的成员没有什么影响。对于基类成员的访问权限只与基类中的访问说明符有关。

派生访问说明符的目的是控制派生类用户(包括派生类的派生类)对于基类成员的访问权限。

派生类向基类转换的可访问性
派生类向基类的转换是否可访问由使用该转换的代码决定,同时派生类的派生访问说明符也会有影响。假定D继承自B:
1。只有当D公有地继承B时,用户代码才能使用派生类向基类的转换;如果D继承B的方式是受保护的或者私有的,则用户代码不能使该转换。
2。不论D以什么方式继承B,D的成员函数和友元都能使用派生类向基类的转换;派生类向其直接基类的类型转换对于派生类的成员和友元来说永远是可访问的。
3。如果D继承B的方式是公有的或者受保护的,则D的派生类的成员和友元可以使用D向B的类型转换;反之,如果D继承B的方式是私有的,则不能使用。

友元与继承
就像友元关系不以传递一样,友元关系同样也不能继承。基类的友元在访问派生类成员时不具有特殊性,类似的,派生类的友元也不能随意访问基类的成员。

改变个别成员的或访问性
有时我们需要改变派生类继承的某个名字的访问级别,通过使用using声明可以达到这一目的。

通过在类的内部使用using声明语句,我们可以将该类的直接或间接基类中的任何可访问成员(例如,非私有成员)标记出来。using声明语句中名字的访问权限由该using声明语句之前的访问说明符来决定。

派生类只能为那些它可以访问的名字提供using声明。

默认的继承保护级别
默认派生运算符也由定义派生类所用的关键字来决定。默认情况下,使用class关键字定义的派生类的私有继承的;而使用struct关键字定义的派生类是公有继承的。

0 0