1.  类内的访问控制

  1. 在基类中,public和private具有普通的含义:用户(即基类的对象)可以访问public成员(包括函数、数据),而不能访问private成员。private只能被基类的成员和友员访问。(注:基类的对象无权访问private成员)
  2. 派生类对基类的public和private具有相同的含义:它可以访问public成员,不可以访问private成员。派生类对象亦如此。
  3. 为了使派生类(注:是类, 不是类对象)可以基类的成员,但禁止基类的对象访问,定义了protected控制。基类protected成员,派生类可以访问,但基类以及派生类的对象是不行的。

示例

#include <iostream>
#include <stdexcept>
#include <string>
#include <vector>
using namespace std; class Item_base
{
public:
Item_base(const string &book = "", double sales_price = 0.0) : isbn(book), price(sales_price) {};
virtual ~Item_base() {}
private:
string isbn;
protected:
double price;
};
class Bulk_item : public Item_base
{
public:
void print_hello() { cout << price << endl; }
}; int main()
{
Bulk_item b;
b.print_hello();
}

结果

0

2. 派生列表的访问控制

派生类中由两部分构成:基类的一部分+自身定义的一部分。派生类列表中访问控制,将影响基类的部分在派生类中的访问级别:

  • 如果为公有继承:派生类中的基类成员保持自己的访问级别:public还是public, private还是private,protected还是protected
  • 如果为私有继承:派生类中基类的所有成员将全部为private成员
  • 如果为受保护继承:派生类中基类的public、protected成员变为protected成员,private还是private

总之:派生类可以进一步限制,但是不可以放松对所有继承成员的访问

注意:私有继承类成员中仍可以访问基类的public, private成员,只是基类的部分在派生类中的性质变为:private。

例证1

#include <iostream>
#include <string>
using namespace std; class base
{
public:
base(int p1=, int p2=, int p3=) : pub(p1), pri(p2), pro(p3) {}
int pub;
private:
int pri;
protected:
int pro;
}; class derived_private : protected base
{
public:
void print_pri()
{
cout << "pub:" << pub << endl;
cout << "pro:" << pro << endl;
}
}; int main()
{
base b;
derived_private d;
d.print_pri();
}

结果1

例证2

#include <iostream>
#include <string>
using namespace std; class base
{
public:
base(int p1=, int p2=, int p3=) : pub(p1), pri(p2), pro(p3) {}
int pub;
private:
int pri;
protected:
int pro;
}; class derived_private : private base
{
public:
void print_pri()
{
cout << "pub:" << pub << endl;
cout << "pro:" << pro << endl;
}
}; int main()
{
base b;
derived_private d;
cout << d.pub << endl;
cout << d.pri << endl;
cout << d.pro << endl;
}

结果2

【c++】访问控制的更多相关文章

  1. RBAC基于角色的访问控制

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...

  2. .NET环境下基于RBAC的访问控制

    .NET环境下基于RBAC的访问控制 Access Control of Application Based on RBAC model in .NET Environment 摘 要:本文从目前信息 ...

  3. ZooKeeper 笔记(5) ACL(Access Control List)访问控制列表

    zk做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机制来解决访问权限问题,详见官网文档:ht ...

  4. Centos下ACL(访问控制列表)介绍(转)

    我们知道,在Linux操作系统中,传统的权限管理分是以三种身份(属主.属組以及其它人)搭配三种权限(可读.可写以及可执行),并且搭配三种特殊权限(SUID,SGID,SBIT),来实现对系统的安全保护 ...

  5. IdentityServer4 简单使用,包括api访问控制,openid的授权登录,js访问

    写在前面 先分享一首数摇:http://music.163.com/m/song?id=36089751&userid=52749763 其次是:对于identityServer理解并不是特别 ...

  6. public/private/protected访问控制权限的区别

    //public/private/protected访问控制权限的区别//时间:2016/8/16 //(一)修饰成员: //public: 在类内.类外都能使用 . //protected: 在类内 ...

  7. Swift 3 中的访问控制 open public internal fileprivate private

    Swift 3必看:新的访问控制fileprivate和open http://www.jianshu.com/p/604305a61e57 浅谈 Swift 3 中的访问控制 https://mai ...

  8. ssh访问控制,多次失败登录即封掉IP,防止暴力破解

    ssh访问控制,多次失败登录即封掉IP,防止暴力破解 一.系统:Centos6.3 64位 二.方法:读取/var/log/secure,查找关键字 Failed,例如(注:文中的IP地址特意做了删减 ...

  9. 访问控制public/protected/private的区别

    Java支持四种不同的访问权限: 修饰符 说明 public 共有的,对所有类可见. protected 受保护的,对同一包内的类和所有子类可见. private 私有的,在同一类内可见. 默认的 在 ...

  10. swift学习笔记之-访问控制

    //访问控制 import UIKit /*访问控制(Access Control) 1.访问控制可以限定其他源文件或模块中的代码对你的代码的访问级别.这个特性可以让我们隐藏代码的一些实现细节,并且可 ...

随机推荐

  1. C#winform自定义滚动条

    1.控件 一个UserControl作为ScrollBg,一个panel作为ScrollBar 2.实现功能 (1)设置滚动条背景颜色和背景图片 (2)设置滚动条滑块的背景颜色和背景图片 (3)鼠标左 ...

  2. mvc - Authorize授权

    from : http://www.cnblogs.com/asks/p/4372783.html http://www.cnblogs.com/myindex/p/5479428.html

  3. MVC dropdownlist 下拉框

    List<SelectListItem> items = new List<SelectListItem>(); items.Add(new SelectListItem() ...

  4. “全栈2019”Java第十三章:基本数据类型

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. Python处理json数据--世界国家维度数据

    1.准备国家的json数据 将准备好的json数据放在指定的目录下,此处可以重这里下载 2.测试编写python脚本处理json提取字段值 #coding:utf8 import time, re, ...

  6. KEY

    typedef struct st_key { uint key_length; /* Tot length of key */ ulong flags; /* dupp key and pack f ...

  7. P1444 [USACO1.3]虫洞wormhole

    luogu P1444 [USACO1.3]虫洞wormhole 首先感谢ghj的讲解 题目描述 农夫约翰爱好在周末进行高能物理实验的结果却适得其反,导致N个虫洞在农场上(2<=N<=12 ...

  8. UVA-10929-You can say 11(秦九昭算法+同余与模算术)

    原题链接 1000位大数取余: 秦九昭算法+同余与模算术: 1314 = (((1)*10+3)*10+1)*10+4 ( a + b ) % n = ( ( a % n ) + ( b % n ) ...

  9. Kettle导入数据到Hive 出现多余的几行全部是null值的情况

    Kylin构建Cube的时候老是报错,说是有空值,其实源数据中是不存在空值的.为什么建Cube的时候会有呢? 执行完毕后使用Hive查询发现多了好几行全部是null的行. 这在源数据中是不存在的.分析 ...

  10. HTML5 Canvas核心技术 图形、动画与游戏开发学习总结

    save 和 restore 函数的应用 保存canvas和恢复canvas clip函数的应用 文字的绘制 背景图片的绘制 离屏canvas 基于时间的运动