现在的位置: 首页 > 综合 > 正文

类成员的访问控制(C++)

2018年07月11日 ⁄ 综合 ⁄ 共 1519字 ⁄ 字号 评论关闭

 类是面向对象程序设计方法的核心,利用它可以实现对数据的封装、隐蔽,通过类的继承和派生,能够实现对问题的深入抽象描述。类的成员包括数据成员和函数成员,分别描述问题的属性和行为,是不可分割的两个方面。数据成员的声明方式与一般的变量相同,只要将这个声明放在类的主体中即可。类的数据成员与一般变量的区别在于其访问权限可以由类来控制。函数成员是描述类行为的成员,一般在类中声明原型,在类外定义函数的具体实现。

暂不考虑继承:

       对类成员访问权限的控制,是通过设置成员的访问控制属性实现的。访问控制属性有以下三种:public,private和protected。

       公有类型成员用public关键字声明,任何一个来自类外部的访问都必须通过这种类型的成员来访问(“对象.公有成员”)。公有类型声明了类的外部接口。

       私有类型成员用private声明(若私有类型成员紧接着类名称,可省略关键字),私有类型的成员只允许本类的成员函数来访问,而类外部的任何访问都是非法的。这样完成了私有成员的隐蔽。 

        在不考虑继承的情况下, 保护类型(protected)的性质和私有类型的性质一致。即保护类型和私有类型的性质相似,其差别在于继承过程中对产生的新类影响不同。

        若在类的内部访问时,所有成员之间都可以通过成员名直接访问,这就实现了对访问的有效控制。

考虑继承:

       派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部函数成员,但是这些成员的访问属性在派生的过程中是可以调整的。从基类继承的成员,其访问属性由继承方式控制。基类的成员可以有public、private和 protected三种访问属性,基类的自身成员可以对基类中任何一个其他成员进行访问,但是通过基类的对象就只能访问基类的共有成员。

       类的继承方式有公有继承(public)、私有继承(private)和保护继承(protected)三种,不同的继承方式,导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所不同。这里所说的访问来自两个方面:一是派生类中的新增成员对从基类继承来的成员的访问;二是在派生类外部(非类族内的成员),通过派生类的对象对从基类继承来的成员的访问。

       公有继承(public):当派生类对基类的继承方式为公有继承,基类的公有成员和保护成员被继承到派生类中仍作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。其他外部使用者只能通过派生类的对象访问继承来的公有成员,而无论是派生类的成员还是派生类的对象都无法访问基类的私有成员(基类的私有成员只能由基类本身的成员访问)。

       私有继承(private):当类的继承方式为私有继承时,基类中的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员可以直接访问它们,但是在类外部通过派生类的对象无法访问。无论是派生类的成员还是派生类的对象都无法访问从派生类继承的私有成员。

       保护继承(protected):保护继承中,基类的公有和保护成员都以保护成员的身份出现在派生类中,即派生类的其他成员都可以直接访问从基类继承来的公有和保护成员,但在类外部通过派生类的对象无法访问它们。基类的私有成员不可访问。

      比较私有继承和保护继承,可以看出实际上在直接派生类中,所有成员的访问属性都是完全相同的。但是,如果派生类作为基类继续派生时,二者的区别就出现了。

 

参考资料:http://blog.163.com/hulin_feng/blog/static/92352532008216115931525/

抱歉!评论已关闭.