继承中的特点
有public, protected, private
三种继承方式,它们相应地改变了基类成员的访问属性。
1.public
继承:基类 public
成员,protected
成员,private
成员的访问属性在派生类中分别变成:public, protected, private
2.protected
继承:基类 public
成员,protected
成员,private
成员的访问属性在派生类中分别变成:protected, protected, private
3.private
继承:基类 public
成员,protected
成员,private
成员的访问属性在派生类中分别变成:private, private, private
但无论哪种继承方式,下面两点都没有改变:
1.
private
成员只能被本类成员(类内)和友元访问,不能被派生类访问;
2.
protected
成员可以被派生类访问。
#include <iostream>
using namespace std;
class Base {
int a() {cout<<"a\n";};
protected:
int b() {cout<<"b\n";};
public:
int c() {cout<<"c\n";};
};
class Da: protected Base {
};
class Db: public Da{
public:
int foo() {c();}
};
int main() {
Db cc;
cc.foo();
return 0;
}
总的来说,
基类一个protected
成员在private
继承到第二类后,再由第三类继承第二类时,基类中的protected
成员在第二类中变成了private
成员,这个成员只能被自己和友元访问了,所以第二类的派生类(第三类)就无法访问这个成员了。简言之就是看从自己的上一个基类是啥类型,public
和protected
自己能访问,private
不能。
此外,
默认的派生方式是private