【c++】访问控制
1. 类内的访问控制
- 在基类中,public和private具有普通的含义:用户(即基类的对象)可以访问public成员(包括函数、数据),而不能访问private成员。private只能被基类的成员和友员访问。(注:基类的对象无权访问private成员)
- 派生类对基类的public和private具有相同的含义:它可以访问public成员,不可以访问private成员。派生类对象亦如此。
- 为了使派生类(注:是类, 不是类对象)可以基类的成员,但禁止基类的对象访问,定义了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++】访问控制的更多相关文章
- RBAC基于角色的访问控制
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...
- .NET环境下基于RBAC的访问控制
.NET环境下基于RBAC的访问控制 Access Control of Application Based on RBAC model in .NET Environment 摘 要:本文从目前信息 ...
- ZooKeeper 笔记(5) ACL(Access Control List)访问控制列表
zk做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机制来解决访问权限问题,详见官网文档:ht ...
- Centos下ACL(访问控制列表)介绍(转)
我们知道,在Linux操作系统中,传统的权限管理分是以三种身份(属主.属組以及其它人)搭配三种权限(可读.可写以及可执行),并且搭配三种特殊权限(SUID,SGID,SBIT),来实现对系统的安全保护 ...
- IdentityServer4 简单使用,包括api访问控制,openid的授权登录,js访问
写在前面 先分享一首数摇:http://music.163.com/m/song?id=36089751&userid=52749763 其次是:对于identityServer理解并不是特别 ...
- public/private/protected访问控制权限的区别
//public/private/protected访问控制权限的区别//时间:2016/8/16 //(一)修饰成员: //public: 在类内.类外都能使用 . //protected: 在类内 ...
- Swift 3 中的访问控制 open public internal fileprivate private
Swift 3必看:新的访问控制fileprivate和open http://www.jianshu.com/p/604305a61e57 浅谈 Swift 3 中的访问控制 https://mai ...
- ssh访问控制,多次失败登录即封掉IP,防止暴力破解
ssh访问控制,多次失败登录即封掉IP,防止暴力破解 一.系统:Centos6.3 64位 二.方法:读取/var/log/secure,查找关键字 Failed,例如(注:文中的IP地址特意做了删减 ...
- 访问控制public/protected/private的区别
Java支持四种不同的访问权限: 修饰符 说明 public 共有的,对所有类可见. protected 受保护的,对同一包内的类和所有子类可见. private 私有的,在同一类内可见. 默认的 在 ...
- swift学习笔记之-访问控制
//访问控制 import UIKit /*访问控制(Access Control) 1.访问控制可以限定其他源文件或模块中的代码对你的代码的访问级别.这个特性可以让我们隐藏代码的一些实现细节,并且可 ...
随机推荐
- Android-广播概念
Android中的消息机制 1.Handler+Message消息机制,是用于子线程与主线程的通讯: 2.广播+广播接收者也是消息机制,是重量级别的,四大组件之一,需要激活组件,是用于组件和组件之间通 ...
- 20145233《网络对抗》Exp6 信息收集和漏洞扫描
20145233<网络对抗>Exp6 信息收集和漏洞扫描 实验问题思考 哪些组织负责DNS,IP的管理 全球根服务器均由美国政府授权的ICANN统一管理,负责DNS和IP地址管理.全球一共 ...
- Data Base Mysql迁移到SqlServer 2008工具使用方法
Data Base Mysql迁移到SqlServer 2008工具使用方法 一.下载及安装: 二.
- 【程序】必看干货:Photon多人游戏开发教程
PUN介绍 http://vibrantlink.com/ 入门 Photon Unity Networking(首字母缩写PUN)是一个Unity多人游戏插件包.它提供了身份验证选项.匹配,以及快速 ...
- 932. Beautiful Array
For some fixed N, an array A is beautiful if it is a permutation of the integers 1, 2, ..., N, such ...
- kali linux之Msf-exploit模块,生成payload
Exploit模块 Active exploit(主动地向目标机器发送payload并执行,使目标交出shell(反连等)) msf5 > use exploit/windows/smb/pse ...
- Django自带表User认证详解
认证登陆(附方法实现代码,百度网盘拉取即可下载,激活码:gqt1) 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中: 如果用户存在于数据库中,然 ...
- 初探 模拟退火算法 POJ2420 HDU1109
模拟退火算法来源于固体退火原理,更多的化学物理公式等等这里不再废话,我们直接这么来看 模拟退火算法简而言之就是一种暴力搜索算法,用来在一定概率下查找全局最优解 找的过程和固体退火原理有所联系,一般来讲 ...
- codis__数据迁移和伸缩容
数据迁移命令 注意点:是迁移到某个 redis-group 而不是某个redis-servers 实例 伸缩容用法 redis 内存等不够用时 增容 : 增加redis-group, 然后迁移使用上 ...
- 不用split调转字符串