您的位置:首页 > 编程语言 > C语言/C++

c++类的访问控制与继承

2017-04-20 10:55 295 查看
对于类的成员,访问权限所控制的是类的实例对象对类中的成员的访问能力;而继承关系中访问权限所控制的是子类对于父类的数据成员的访问与使用能力。

private,public,protected方法的访问范围.(public继承下)

private:

只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. 被private修饰的成员只能被同一个类中的成员函数或在该类中声明的友元函数所访问。

这里的私有,不是说只有基类拥有!

而是说,这些私有成员只能在基类内被直接使用,不能在派生类或者类外直接使用。

所以说私有,不是独自拥有,而是说基类私有直接使用权。

于子类而言,无论以何种方式继承,父类的private成员于其都是隔离的,无法访问,只能通过父类的protected或public成员函数所访问。

当以private方式继承时,基类的public、protected成员均成为子类的private成员。

protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问

被protected修饰的成员同样也只能被同一个类中的成员函数或在该类中声明的友元函数所访问,

与由private修饰的成员不同的是,protected修饰的成员可以为子类所继承。

当以protected方式继承时,基类的public、protect成员均成为子类的protected成员。

public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问

这是权限最大的修饰符,被public所修饰的成员既可以被类中的成员函数(或友元函数)访问,也可以被类的实例在类外直接使用。同时,也能够为子类所继承。

当以public方式继承时,基类的访问权限在子类中保持不变(当然不包括private成员)。

附一张图:



注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数

在无继承的情况下,类内部可以随意访问,即使是private;类外部无法访问protected/private成员 .

注意!!!

派生类会从其基类没有选择的接收所有成员(除构造和析构函数)

虽然无论以何种方式继承,父类的private对于子类是隔离的,但是类的私有成员会被继承到派生类中,只不过受到C++语法的限制,在派生类中访问基类的私有成员只能通过间接的方式进行,即只能通过父类的protected或public成员函数所访问。

有两种方式:

派生类不能直接访问基类的私有成员,若要访问必须使用基类的接口,即通过其成员函数。实现方法有如下两种:

1.在基类的声明中增加保护成员,将基类中提供给派生类访问的私有成员定义为保护成员。

2.将需要访问基类私有成员的派生类成员函数声明为友元。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  访问控制 c++