1) 前言

在我学习C++的过程中,类中成员的权限控制一直是比较头疼的一个点,一会public,一会又private,还有protected,再加点继承,而且又有公有继承、私有继承,保护继承,所以感觉会比较乱。

后来不断学习过程中,慢慢理顺了它们的关系,稍微分类总结一下,在这个问题上基本上就没再栽过跟头。如有笔误,希望大神指点一下!

2 )C++的水平权限控制

首先解释几个特定词,下面要用到:

水平权限:在一个类中,成员的权限控制,就是类中的成员函数能否访问其他成员、类的对象能否访问类中某成员。

垂直权限:在派生类中,对从基类继承来的成员的访问。

内部访问:类中成员函数对其他成员的访问。

外部访问:通过类的对象,访问类的成员函数或者成员变量,有的书里也称之为对象访问。

这里的“水平”是自己为了容易理解而用的,其实也可以用“横向”这类的词,其他的词类似;词的叫法意义不大,但对加深理解却可以事半功倍!

private,public,protected单纯的作为一个类中的成员(变量和函数)权限设置时:

类的成员函数以及友元函数可以访问类中所有成员,但是在类外通过类的对象,就只能访问该类的共有成员。

注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数;这里将友元函数看成内部函数,方便记忆!

总结为下表:

类中属性

private

protected

public

内部可见性

可见

可见

可见

外部可见性

不可见

不可见

可见

程序验证如下:这里没有friend的成员,另外成员变量和成员函数的权限控制是一样的。

 #include <iostream> 

 class Foo
{
public:
int a;
void public_fun();
protected:
char b;
void protected_fun();
private:
bool c;
void private_fun();
}; //验证public成员内部可见性
void Foo::public_fun()
{
a = ;
b = 'c';
c = true;
} //验证protected成员函数的内部可见性
void Foo::protected_fun()
{
a = ;
b = 'c';
c = true;
} //验证private成员函数的内部可见性
void Foo::private_fun()
{
a = ;
b = 'c';
c = true;
} int main()
{
Foo foo;
foo.public_fun();//验证public成员外部可见性
foo.protected_fun();//验证protected成员外部可见性,这里提示错误
foo.private_fun();//验证private成员外部可见性,这里提示错误
return ;
}

3)C++的垂直访问控制

private,public,protected作为继承方式时:

派生类可以继承基类中除了构造函数与析构函数(凡是与具体对象的类别息息相关的都不能被继承,赋值运算符重载函数也不能被继承)之外的成员,但是这些成员的访问属性在派生过程中是可以调整的。从基类继承来的成员在派生类中的访问属性是由继承方式控制的。

基类中属性

private

protected

public

private

protected

public

private

protected

public

继承方式

private

protected

public

内部可见性

不可见

private

private

不可见

protected

protected

不可见

protected

public

外部可见性

不可见

不可见

不可见

不可见

不可见

不可见

不可见

不可见

可见

派生类对基类成员的访问形式主要有以下两种:

(1)内部访问:由派生类中新增的成员函数对基类继承来的成员的访问。

(2)外部访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问。

4) 有关权限控制的理解

C++的权限控制,给人感觉有点繁琐,特别是三种权限,再加上三种继承方式,还有友元那些东西,非常让人头大,这里总结一下,基本上把最常见和常用的给理清楚啦,一些这方面的问题,比如实际工作或者笔试题目,即可迎刃而解。

C++成员权限控制(总结)的更多相关文章

  1. Java成员的访问权限控制

    Java中的访问权限控制包含两个部分: 类的访问权限控制 类成员的访问权限控制 对类来说,访问权限控制修饰符可以是public或者无修饰符(默认的包访问权限): 对于类成员来说,访问权限控制修饰符可以 ...

  2. java基础-类成员访问权限控制

    一 前言 这篇文章是很基础的一文,没多大深度,对于开发人员必然是熟练于心.本篇文章的主题是为什么java要设置类成员访问级别?其原因也很简单,就是为了面向对象的封装特性:将类成员使用不同的访问级别控制 ...

  3. 尝试asp.net mvc 基于controller action 方式权限控制方案可行性

    微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...

  4. (转)浅析Java中的访问权限控制

    原文地址: http://www.cnblogs.com/dolphin0520/p/3734915.html 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下 ...

  5. 浅析Java中的访问权限控制

    浅析Java中的访问权限控制 今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下为何需要访问权限控制.考虑两个场景: 场景1:工程师A编写了一个类ClassA,但 ...

  6. JAVA访问权限控制[zhuan]

    Java的访问权限控制修饰符,从最大权限到最小权限依次是:public.protected.包访问权限(默认,没有关键字)和private.对于类的访问权限只能是:public和包访问权限(但内部类可 ...

  7. 为CDH 5.7集群添加Kerberos身份验证及Sentry权限控制

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 4. 为CDH 5集群添加Kerberos身份验证 4.1 安装sentry1.点击“操作”,“添加服务”:2.选择sen ...

  8. Sql Server来龙去脉系列 必须知道的权限控制核心篇

    最近写了<Sql Server来龙去脉系列  必须知道的权限控制基础篇>,感觉反响比较大.这可能也说明了很多程序猿对数据库权限控制方面比较感兴趣,或者某些技术点了解的没有很透彻. 有些人看 ...

  9. db2权限控制(转)

    转自:http://gocom.primeton.com/blog16274_23254.htm db2权限控制 1. DB2 权限控制数据库安全性计划的以下几方面: 授予用户的权限级别 允许用户运行 ...

随机推荐

  1. Java递归实现操作系统文件的复制、粘贴和删除功能

    通过Java IO递归实现操作系统对文件的复制.粘贴和删除功能,剪切=复制+粘贴+删除 代码示例: import java.io.BufferedInputStream; import java.io ...

  2. Jquery DataTables相关示例

    一.Jquery-DataTables DataTables 是jquery的一个开源的插件.它具有高度灵活的特性,基于渐进增强的基础,可以为任何表格添加交互.它特性如下: 提供分页,搜索和多列排序: ...

  3. 记一次linux服务器问题处理过程

    本周二的时候,涛哥找我,说明了一件事,在安装ganglia的时候,发生的一个问题. 在一台suse 10 sp1的服务器上,安装ganglia的一个依赖包,libconfuse.rpm,安装完成之后, ...

  4. SSIS XML source demo

    以下是一个使用xml作为source的SSIS package示例: 自动生成的xsd.把两个结点merge join成一条记录. 示例XML如下: <?xml version="1. ...

  5. 《TCP/IP 详解 卷一》读书笔记 -----第四章 ARP

    1.一个物理层的网络,例如以太网,可以同时被多个不同的网络层所使用.例如网络中的一些主机使用TCP/IP协议,其他主机使用其他的网络协议. 2.设备驱动软件从不关心IP数据报中的目的IP地址.这也是为 ...

  6. 原创翻译-测试驱动开发(TDD)

    测试驱动开发原则 翻译自<<Expert Python Programming>> 测试驱动开发是指首先编写包含所有测试软件特点的测试集,然后再去开发软件.也就是说,在编写软件 ...

  7. POJ 1195 Mobile Phones

    树状数组,开始的时候wa了,后来看看,原来是概率论没学好,以为求(L,B) - (R,T) 矩阵内的和只要用sum(R+1,T+1) - sum(L,B) 就行了,.傻x了.. 必须 sum(R,T) ...

  8. 栈和队列的面试题Java实现【重要】

    栈和队列: 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min ...

  9. MySQL数据库学习笔记(三)----基本的SQL语句

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  10. Jenkins遇到问题一:jenkins配置权限不对导致无法登陆或者空白页面解决办法

    找到.jenkins/config.xml文件:替换为:1.<authorizationStrategy class="hudson.security.AuthorizationStr ...