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
|
class Base{ //其他内容public: int BaseFunPb(){return m_nPb;} int BaseFunPt(){return m_nPt;} int BaseFunPr(){return m_nPr;}public: int m_nPb;protected: int m_nPt;private: int m_nPr;};class Cpb:public Base{ //其他内容public: int GetPb(){return m_nPb;} int GetPt(){return m_nPt;} int GetPr(){return m_nPr;}};class Cpt:protected Base{ //其他内容public: int GetPb(){return m_nPb;} int GetPt(){return m_nPt;} int GetPr(){return m_nPr;}};class Cpr:private Base{ //其他内容public: int GetPb(){return m_nPb;} int GetPt(){return m_nPt;} int GetPr(){return m_nPr;}}; int main(){ Cpb objB; Cpt objT; Cpr objR; //其他内容} |
访问分为:类对象访问、类内访问两种;
对于基类继承下来的成员的访问与修改权限如下:
| 基类成员访问权限(列) |
public | protected | private | ||||||
| 派生方式(行) | 派生类对象 | 派生类类内 | 派生类对象 |
派生类类内 |
派生类对象 |
派生类类内 |
|||
| public | 可访/可修 | 权限:public 可访/可修 |
不可访/不可修 | 权限:protected 可访/不可修 |
不可访/不可修 | 权限:private 不可访/不可修 |
|||
| protected | 不可访/不可修 | 权限:protected 可访/不可修 |
不可访/不可修 | 权限:private 可访/不可修 |
不可访/不可修 | 权限:private 不可访/不可修 |
|||
| private | 不可访/不可修 | 权限:private 可访/不可修 |
不可访/不可修 | 权限:private 可访/不可修 |
不可访/不可修 | 权限:private 不可访/不可修 |
|||
派生类内不管是 public、protected、private 继承,总是可以访问基类中的public、protected 成员,基类中的 private 成员永远不能在派生类内直接访问,不论通过哪种方式。
派生类对象仅当public派生时,对基类中的public成员有可访问/可修改的权限,其他都为不可访问/不可修改。
用‘B’代表public,用'T‘代表protected,用'R’代表private;BT->T代表基类成员访问权限为B,派生方式为T,派生后成员在派生类内的访问权限为T;‘r'表示可访问,’w'代表可修改,‘-'表示不可访问或不可修改,在第一位表示不可访,在第二位表示不可修;则上表简化为如下:
| 访问权限变更 |
派生类对象 | 派生类类内 | 访问权限变更 | 派生类对象 | 派生类类内 | 访问权限变更 |
派生类对象 | 派生类类内 |
| BB->B | rw | rw | TB->T | -- | r- | RB->R | -- | -- |
| BT->T | -- | r- | TT->R | -- | r- | RT->R | -- | -- |
| BR->R | -- | r- | TR->R | -- | r- | RR->R | -- | -- |
当派生类下面还有派生类时,派生类作为基类,权限更改同上!
C++学习之继承中的成员访问控制的更多相关文章
- C++中的类所占内存空间+继承中的成员访问控制
C++学习之继承中的成员访问控制 C++中的类所占内存空间总结
- C++学习之继承中的访问控制
我们通常认为一个类有两种不同的用户:普通用户 和 类的实现者.其中,普通用户编写的代码使用类的对象,这部分代码只能访问类的公有(接口)成员:实现者则负责编写类的成员和友元的代码,成员和友元既能访问类的 ...
- java学习笔记-继承中super关键字
背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...
- Java学习之继承中的执行顺序详解
代码块(理解) (1)用{}括起来的代码. (2)分类: A:局部代码块 用于限定变量的生命周期,及早释放,提高内存利用率. B:构造代码块 把多个构造方法中相同的代码可以放到这里,每个构造方法执行前 ...
- C++学习笔记-继承中的构造与析构
C++存在构造函数与析构函数,继承中也存在构造和析构函数.继承中的构造和析构函数与普通的构造析构有细微差别. 赋值兼容性原则 #include "iostream" using n ...
- C#继承中构造函数,成员变量的执行顺序
public class Animal { static string baseClassName; protected string _skincolor; Instancevariable iv ...
- Java基础学习-extends继承(成员变量,局部变量,成员方法)
package extend; /*面向对象-继承: * 多个类的共同成员变量和成员方法.抽取到另一个类中(父类),我们多个类就可以访问到父类的成员了 * */ class Game{ String ...
- 【Java学习笔记之二十】final关键字在Java继承中的用法小结
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...
- (C/C++学习)5.C++中的虚继承-虚函数-多态解析
说明:在C++学习的过程中,虚继承-虚函数经常是初学者容易产生误解的两个概念,它们与C++中多态形成的关系,也是很多初学者经常产生困惑的地方,这篇文章将依次分别对三者进行解析,并讲述其之间的联系与不同 ...
随机推荐
- python基础之1--Python入门
第1章 Python生态圈 第2章 编程与编程语言 python是一门编程语言,作为学习python的开始,需要事先搞明白:编程的目的是什么?什么是编程语言?什么是编程? 2.1 编程的目的: 计算机 ...
- 需要了解的几个Java基础点
关键字 native:表示要调用非Java语言写函数,比如用C语言使用JNI实现的接口.比如windows环境的dll文件.举例:Object.hashcode() 位运算 << n:左移 ...
- 停止mysql服务
停止mysql服务windowsnet stop mysql (service mysqld stop win10不能用) linux /etc/init.d/mysqld stop
- 斑马打印机客户端GET和POST,以及后端两种打印方式。
斑马打印机客户端GET和POST,以及后端两种打印方式. 背景环境:打印机安装在客户端外网.当用户登录时,通过ajax取服务器数据,返回打印机命令,然后客户端通过JS发送给斑马打印机. 1.使用Get ...
- WIN10安装SW2012完整破解文件和问题解决Crack
Win10在安装solidword后,激活时有可能报错,本文介绍怎么解决问题 安装后激活报错信息: 一.按下面步骤进行安装 1.相关序列号,记住要断网进行安装 Install SolidWorks 2 ...
- 问题:eclipse中线程编程编译报错,undefined reference to 'pthread_create'的解决方法(已解决)
问题描述: 在Ubuntu系统中,使用eclipse CDT集成开发环境编写pthread程序,编译时,pthread_create不通过,报错信息是: undefined reference to ...
- element-ui表格合并span-method
先看一下合并后的样式,表格第二行,二三四列合并 官网给我们提供了span-method的方法可以进行表格合并,有4个参数返回:row,column,rowIndex,columnIndex;row和c ...
- 单例模式+volatile禁止指令重排序
单例模式: 单例,顾名思义就是只能有一个.不能再出现第二个.就如同地球上没有两片一模一样的树叶一样. 在这里就是说:一个类只能有一个实例,并且整个项目系统都能访问该实例. 单例模式共分为两大类: 懒汉 ...
- Dev Express Report 学习总结(五)在分组中使用聚集表达式AggregateExpression
聚集表达式AggregateExpression主要包括几种:Avg(),Count(),Exists(),Max(),Min(),Single()和Sum().其中对于Sum(),在我看来主要有两种 ...
- ASC19超算概述
初赛题目组成 设计超算集群(看参考文献做设计) 对超算集群进行性能测试(一般来讲的测试工具就是用HPL,找到最适合的参数,达到最优秀的计算能力) 数字图像处理(通常代码量较大,代码优化较为困难,优化偏 ...