• part4.(two)派生类成员函数和其它函数访问基类成员时的权限(访问控制表)


    一、关于访问控制符(3种访问属性)

      1、类中的访问控制符:①默认值为私有,可声明为公有或保护;

                ②私有(private)成员的访问属性:只能供本类的成员函数和友员函数访问,不准其它函数访问;

                ③公有(public)成员的访问属性:可供任何函数访问;

                ④保护(protected)成员的访问属性:除与私有成员相同外,还允许派生类成员函数访问,但不准其它函数访问。

      2、结构体(struct)中的访问控制符:默认为公有,可设置为私有或者保护

      3、联合结构体(union):只能为公有

    即:本类(直接基类)的成员函数有权访问访问控制表内的所有成员。派生类的成员函数只能访问具有publicprotected属性的成员。而其他函数只能访问具有public属性的成员。

     二、3种继承方式

    配合3种访问属性 构成的 访问关系映射表 如下

     注意:1、派生类对象的栈区存储内容与继承方式和访问权限无关。

        2、一个类的访问控制表内只包含该类及其基类(直接的和间接的)中符合访问权限的数据成员和成员函数而不是全部成员,也不包括虚指针。

    而一个类对象的栈区存储内容则包括该类及其所有基类(直接的和间接的)的全部非静态数据成员(无论能否访问),也包括虚指针,但不包括任何静态数据成员和成员函数,它与继承方式及访问权限无关。

        3、某些场合下,当派生类中所继承的数据为私有时,可能希望个别数据改变为具有公有性质。此时可利用以下语句:

          public:

          using base::a;

     

    将派生类中某些继承数据的私有性质改变为公有性质
     1 // der_priv_1.cpp
     2 // When derivation is private so that public or protected member in base class
     3 // becomes privately accessible in derived class, it can become publicly accessible
     4 // by "using base::a;"
     5 
     6 #include <iostream.h>
     7 
     8 class A
     9 {
    10 public:
    11       A(int i) {    a=i;}
    12 protected:    //or public:
    13       int a;
    14 };
    15 
    16 class B: A    //private derivation
    17 {
    18 public:
    19       B(int a):A(a) { }
    20       using A::a;        //将A::a的私有性质改变为公有性质
    21 };
    22 
    23 void main()
    24 {
    25      B  obj(5);
    26      cout<<obj.a<<endl;
    27 }
  • 相关阅读:
    error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
    E: 无法获得锁 /var/lib/apt/lists/lock
    卸载nginx
    服务器文件传输
    一些重要的sql命令
    设置某个字段的值是唯一的
    mysql注释的方法
    认证 (authentication) 和授权 (authorization) 的区别
    neutron_lib: 一个进程内的发布与订阅
    人工智能导论作业
  • 原文地址:https://www.cnblogs.com/kalo1111/p/3063745.html
Copyright © 2020-2023  润新知