继承成员访问控制机制(C++)



面向对象编程其中肯定少不了类的继承机制,而类的继承又分为三种类型:公有继承(public)、私有继承(private)和保护继承(protected),不同的继承机制使派生类对基类成员有不同的访问权限,而派生类的类成员和对象成员对基类又有不同的访问权限。

在开始介绍派生类的访问机制之前,我们先来了解一下类的成员和对象的成员。

类的成员

静态成员,即类的static类型成员,它可以访问类中的所有成员,可以直接用类.属性(方法)来表示

对象的成员

非静态成员,必须先new一个类的对象,通过对象.属性(方法)或者this->属性(方法)来表示。

好了,了解了类成员和对象成员,接下来说一下派生类对基类的继承访问机制。

在类的继承机制中,其实派生类也继承了基类的私有成员,但没有访问权限,或者也可以等价为根本没有继承基类的私有成员,基类的私有成员只允许基类自身或基类的友元函数调用,其他都没有访问权限,了解了这一点下面对私有成员将不再赘述。

另外,派生类的对象不能访问基类私有的和保护类型的成员,只能访问公有成员。下面都是基于派生类的类成员的访问权限

在公用继承中,基类的公用成员和保护成员在派生类中都保持原有的访问属性

在私有继承中,基类的公用成员和保护成员在派生类中的访问权限都变为私有,即只允许派生类的类成员访问,其他都没有访问权限。

在保护继承中,基类的公用成员和保护成员在派生类中的访问权限都变为保护类型的,只允许派生类的类成员或二级派生类访问。

下图是对以上解释的图示(只针对类的成员成立):

最后通过一个简单的小例子来帮助消化吸收一下

Class A{

Public:

F1()

Private:

F2()

Protected:

F3()

}

Class B:Public  A{

Public:

F4()

}

Class C:private  B{}

类B的成员可以访问F1,F3,不能访问F2

类B的对象可以访问F1,不能访问F2,F3

类C的成员可以访问F1,F4,F3,不能访问F2

类C的对象可以访问F1,F4,不能访问F2,F3

关于类的继承,在面向对象编程中是必不可少的一部分,以上是我学习后的理解,文中有观点不正确的地方,欢迎指正。

时间: 2024-10-08 15:41:38

继承成员访问控制机制(C++)的相关文章

C++中的类所占内存空间+继承中的成员访问控制

C++学习之继承中的成员访问控制 C++中的类所占内存空间总结 原文地址:https://www.cnblogs.com/ranjiewen/p/8280915.html

【C/C++】继承与访问控制

常见问题 Q1. 类child从类parent公有派生,则类child可以访问类parent中的哪些成员? A. public成员 B. private成员 C. protected成员 D. 数据成员 Q2. 类child从类parent公有派生,若有"child c;",那么c可以访问类parent中的哪些成员? A. public成员 B. private成员 C. protected成员 D. 都不能访问 Q3. 类child从类parent私有派生,则类child可以访问类p

C/C++ C# JAVA比教学------访问控制机制

1.java java中表示权限的关键字分别为public,protected,private.没有friendly这个,什么都不写的话也是一种不同的权限表示. class Mall { public String mallName; } class SuperMarket extends Mall { public void Show(){ System.out.println("THIS IS A SUPERMAKET:"); System.out.println(mallName

FreeBSD 5.0中强制访问控制机制的使用与源代码分析【转】

本文主要讲述FreeBSD 5.0操作系统中新增的重要安全机制,即强制访问控制机制(MAC)的使用与源代码分析,主要包括强制访问控制框架及多级安全(MLS)策略两部分内容.这一部分讲述要将MAC框架与MLS策略用起来,应该做的一些工作,以及如何有效使用它们的问题. ? 强制访问控制(英文缩写MAC)是实现操作系统安全的一个重要的方法,现在几乎所有的安全操作系统都采用强制访问控制作为其核心安全机制之一.强制访问控制是对操作系统的各种客体(如文件.socket.系统FIFO.SCD.IPC等)进行细

另一种访问控制机制TCP Wrappers

TCP  Wrappers 在之前的文章中我们介绍过iptables,iptables也是一种访问控制机制.由于iptables中的参数过多,对于初学者要想完全掌握iptables有一定的难度.因此,在这里我们介绍另一种简单的访问控制机制,就是TCP Wrappers. TCP Wrappers的工作原理主要是分析TCP的报头信息,并与/etc/hosts.allow和/etc/hosts.deny中的规则进行匹配,从而决定哪些主机可以访问系统服务或资源. TCP Wrappers虽然能对TCP

MySQL并发访问控制机制

并发控制:并发控制对于任何一个允许多个用户连入进来并请求资源的服务来讲都是必须要完成的功能    MySQL作为服务器来讲,其内部有很多数据有很多张表,表中有数据,无论是myisam还是InnoDB存储引擎对于单张表来讲如果没做分区,那么其数据都放在同一个文本文件,当两个客户端同时发起MySQL会话,连入MySQL时,MySQL服务会启动两个会话线程来给两个用户建立连接,假如第一个用户发起select语句查询表中的所有行,如表tb1,而第二个用户希望在表中同时要插入数据,那么这两条语句能否同时执

对私有继承成员的公有化

在C++中一般很少采用私有继承. 一般采用的都是公有继承的方式: class A:public B{...}; 但是私有继承在我们只要部分公有化继承成员的时候是很有用的. 当采用的是私有继承的时候,基类中的public都会变成private .而此时如果我们希望其中的一部分成员是可视的话,那么我们只要在继承的类的public中声明他们就好了. #include<iostream> using namespace std; class Pet{ public: void eat()const{c

MAC访问控制机制在Linux系统中的实现:SELinux

SELinux全称:Security-Enhanced Linux,安全加强的Linux:SELinux系统的本来名称为MAC:强制访问控制:SELinux就是MAC访问控制机制在Linux系统中的实现: 操作系统安全等级标准(橙皮书): D级别(最低安全级别) C级别:C1, C2 (DAC自主访问控制,例如windows等系统的安全级别为C1级别) B级别:B1, B2, B3 (强制访问控制级别MAC) A级别(最高安全级别) 访问控制机制: DAC:Discretionary Acces

C++学习之继承中的成员访问控制

由基类到派生类的过程中,在派生类里如何访问基类成员,以及派生类对象如何访问基类成员,是根据派生类在从基类派生时是以什么方式进行的派生:public.protect或者private.下面说一下在这三种派生方式下成员函数和成员变量的访问和修改权限.派生类是指直接派生类! [代码1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 c