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;

protectedint 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 -- --

当派生类下面还有派生类时,派生类作为基类,权限更改同上!

来自为知笔记(Wiz)

时间: 2024-10-22 08:43:42

C++学习之继承中的成员访问控制的相关文章

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

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

Java学习之继承中的执行顺序详解

代码块(理解) (1)用{}括起来的代码. (2)分类: A:局部代码块 用于限定变量的生命周期,及早释放,提高内存利用率. B:构造代码块 把多个构造方法中相同的代码可以放到这里,每个构造方法执行前,首先执行构造代码块. C:静态代码块 static{}对类的数据进行初始化,仅仅只执行一次. (3)静态代码块,构造代码块,构造方法的顺序问题? 静态代码块 > 构造代码块 > 构造方法 class Student { static { System.out.println("Stud

c++继承中同名成员处理

所谓同名成员也就是 子类与父类 变量或者成员函数重名 看看以下代码,了解访问方式 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 class father 5 { 6 public: 7 int a = 100; 8 void fun() 9 { 10 cout << "father fun " << endl; 11 } 12 void fun(int x) 13 { 14 a = x; 1

在java继承中对于成员变量和方法的处理是不同的

body { font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5; } html, body { } h1 { font-size:1.5em; font-weight:bold; } h2 { font-size:1.4em; font-weight:bold; } h3 { fon

C#继承中构造函数,成员变量的执行顺序

public class Animal { static string baseClassName; protected string _skincolor; Instancevariable iv = new Instancevariable("父类实例成员变量"); static Instancevariable siv = new Instancevariable("父类静态成员变量"); static Animal() { baseClassName = &

Java基础学习-extends继承(成员变量,局部变量,成员方法)

package extend; /*面向对象-继承: * 多个类的共同成员变量和成员方法.抽取到另一个类中(父类),我们多个类就可以访问到父类的成员了 * */ class Game{ String name; double vesion;//版本号 String agent;//代理商 public void start() { System.out.println("游戏启动"); } public void stop() { System.out.println("游戏

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

 面向对象编程其中肯定少不了类的继承机制,而类的继承又分为三种类型:公有继承(public).私有继承(private)和保护继承(protected),不同的继承机制使派生类对基类成员有不同的访问权限,而派生类的类成员和对象成员对基类又有不同的访问权限. 在开始介绍派生类的访问机制之前,我们先来了解一下类的成员和对象的成员. 类的成员 静态成员,即类的static类型成员,它可以访问类中的所有成员,可以直接用类.属性(方法)来表示 对象的成员 非静态成员,必须先new一个类的对象,通过对象

【Java学习笔记之二十】final关键字在Java继承中的用法小结

谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. 一.final关键字的基本用法 在Java中,final关键字可以用来修饰类.方法和变量(包括成员变量和局部变量).下面就从这三个方面来了解一下final关键字的基本用法. 1.修饰类   当用final修饰一个类时,表明这个类不能被继承.也就是说,如果一个类你永远不会让他被继承,就可以用final

面向对象程序设计——抽象基类,访问控制与继承,继承中的类作用域,拷贝函数与拷贝控制

一.抽象基类 1)纯虚函数 和普通的虚函数不同,一个纯虚函数无须定义.我们通过在函数体的位置(即在声明语句的分号之前)书写=0就可以将一个虚函数说明为纯虚函数.其中,=0只能出现在类内部的虚函数声明语句处. 值得注意的是,我们也可以为纯虚函数提供定义,不过函数体必须定义在类的外部.也就是说,我们不能在类的内部为一个=0的函数提供函数体. 2)含有纯虚函数的类是抽象基类 含有(或者未经覆盖直接继承)纯虚函数的类是抽象基类.抽象基类负责定义接口,而后续的其他类可以覆盖该接口.我们不能直接创建一个抽象