1、每个类分别控制着自己成员的初始化过程,也控制着其成员对于派生类来说是否可以访问
2、派生类的成员和友元(函数、类等)只能通过派生类对象来访问基类的受保护成员,派生类对于一个基类对象中的受保护成员没有任何访问权限
3、类对继承而来的成员的访问权限受两个因素影响:基类中该成员的访问说明符;派生列表中的访问说明符
派生访问说明符对于派生类的成员(及友元)能否访问直接基类的成员没有影响,对基类成员的访问权限只与基类中的访问说明符有关
派生访问说明符的目的是控制其派生类用户(包括派生类的派生类)对于基类成员的访问权限;还可以控制继承自派生类的新类的访问权限
4、就像友元关系不能传递一样,友元关系同样不能继承
5、有时我们需要改变派生类继承的某个名字的访问级别,可以使用using声明
class A
{
public:
void size(){}
protected:
int n;
};
class B :private A //私有继承
{
public:
using A::size; //B的用户可以使用size成员
protected:
using A::n; //B的派生类将可以使用n
};
class C :public B
{
int cc;
C()
{
cc = n;
}
};
6、对于struct其默认的派生访问说明符是public,而对于class其默认的是private
二、类作用域1、继承关系中的作用域嵌套,类似于全局变量和局部变量,当一个名字在派生类的作用域无法正确解析时,则向外层的基类作用域寻找给该名字的定义
2、如果在派生类中定义基类中的名字,那么此时定义在内层作用域(派生类)的名字将隐藏外层的名字
3、可以通过作用域运算符来使用被隐藏的成员
4、由此可见,只有基类和派生类拥有相同的形参列表,才可以通过基类的引用或指针调用派生类的虚函数
5、此外还有:通过基类调用隐藏的函数、覆盖重载的函数等 *** 作
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)