继承权限分为public protected private,其权限见下表:
特征 公有继承 保护继承 私有继承
父类公有成员继成 派生类公有成员 派生类保护成员 派生类私有成员
父类保护成员继成 派生类保护成员 派生类保护成员 派生类私有成员
父类私有成员继成 只能通过基类接口访问 只能通过基类接口访问 只能通过基类接口访问
当继承之后,那么子类对象对父类成员的访问权限又是样的呢?我们可以看如下代码:
#include <iostream>
using namespace std;
class Base
{
public:
void base_foo (){}
protected:
void base_goo(){}
private:
void base_hoo(){}
};
class Derived1:private Base
{
public:
void derived1_foo() {base_foo (); }
void derived1_goo() {base_goo(); }
// void derived1_hoo() {base_hoo(); } // error, inaccessible
};
class Derived2:protected Base
{
public:
void derived2_foo() {base_foo (); }
void derived2_goo() {base_goo(); }
// void derived1_hoo() {base_hoo(); } // error, inaccessible
};
class Derived3:public Base
{
public:
void derived3_foo() {base_foo (); }
void derived3_goo() {base_goo(); }
// void derived1_hoo() {base_hoo(); } // error, inaccessible
};
int main( int argc, char* argv[])
{
Derived1 d1;
d1.base_foo();//error,cannot access
d1.base_goo();//error,cannot access
d1.base_hoo();//error,cannot access
Derived2 d2;
d2.base_foo();//error,cannot access
d2.base_goo();//error,cannot access
d2.base_hoo();//error,cannot access
Derived3 d3;
d3.base_foo();//ok
d3.base_goo();//error,cannot access
d3.base_hoo();//error,cannot access
}
由此可见,只有共有继承的子类对象能够访问父类的共有成员,其余的都会报错。