C++类的公有继承,基类的私有成员在派生类中不可见或不可访问,这个不可见或不可访问是什么意思?
这个理解对吗? 展开
在C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。
方式如下:
公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。
1. 公有继承(public)
公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。
2. 私有继承(private)
私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。
3. 保护继承(protected)
保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。
公有继承:
当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类的私有成员不可直接访问。也就是说基类的公有成员和保护成员被继承到派生类中访问属性不变,仍作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。在类族之外只能通过派生类的对象访问从基类继承的公有成员。
私有继承:
当类的继承方式为私有继承时,基类中的公有成员和保护成员都以私有成员的身份出现在派生类中,而基类的私有成员在派生类中不可直接访问。也就是说基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员可以直接访问它们,但是在类族外部通过派生类的对象无法直接访问它们。无论是派生类的 成员还是通过派生类的对象,都无法直接访问从基类继承的私有成员。
保护继承:
保护继承中,基类的公有成员和保护成员都以保护成员的身份出现在派生类中,而基类的私有成员变量不可直接访问。这样,派生类的其他成员就可以直接访问从基类继承来的公有和保护成员,但在类的外部通过派生类的对象无法直接访问它们,无论是派生类的成员还是派生类的对象都无法直接访问基类的私有成员。
公有继承:保持原状
权限:
(1)派生类成员只能访问基类中的 public/protected 成员;
(2)派生类的对象只能访问基类中的public成员。(注意:派生类和派生类对象是不同的)
私有继承:均变私有
权限:
(1)派生类成员也只能访问基类中的 public/protected 成员;
(2)派生类的对象不能访问基类中的任何的成员。
保护继承:公有、保护变保护
权限:
(1)派生类的成员只能访问基类中的 public/protected 成员;
(2)派生类的对象不能访问基类中的任何的成员。
共性:
1、私有最终都是私有,且不可访问的;
2、这就像一个权限大小包含、约束关系,仔细体会;
3、对象只有公有继承,可以访问 public 成员,其余的都是不能访问的;
4、三种继承,成员访问都是一样的,因为相当于基类成员被已相应的权限规则被copy到子类;
5、上面说的成员可以是:
(1)成员函数
(2)成员变量