C++之类成员的访问权限详解(一)

概念解析

众所周知,面向对象编程语言的特征之一就是封装,不同编程语言对于封装提供的实现有所不同,但原理大体上是相同的。C++提供了三种不同程度的访问权限来实现,主要是通过public、private、protected三个关键字实现的。下面我们来详细分析一下这三个关键字的具体作用和区别。

这三个关键字主要用来控制类或者结构体成员变量和成员函数的访问权限,称为成员访问限定符,分别代表公有的、受保护的、私有的,它们所表达的封装程度不同,在使用时需要特别注意。

访问权限限定符的使用又跟类本身的性质有关,即继承对访问权限的使用有一定的影响,本文主要探讨无继承情况下的访问。

public限定符

被public限定符所修饰的成员变量和函数可以被类的函数、子类的函数、友元函数,也可以由类的对象来访问,即可以使用成员运算符来访问。这里的友元函数,可以是该类的友元函数,也可以是该类的友元类的成员函数。使用形式如下:

class temp{
    public:
       int a; //修饰成员变量
       temp() //修饰成员函数,这里修饰构造函数
       {
         //初始化类对象成员
       }
}

protected限定符

protected限定符修饰的成员变量和成员函数可以被该类的成员函数访问,但是不能被类对象所访问,即不能通过类对象的成员运算符来访问。另外,这些成员可以被子类的函数和友元函数访问,相比public成员 少了一个可以使用类对象直接访问的特性。具体使用与public类似,这里不再贴出代码。

private限定符

被private限定符修饰的成员变量只能被该类的方法和友元函数访问,子类函数无法访问,在这三个限定符中封装程度是最高的,一般来说,应该尽可能将类的成员变量声明为private而不是其他,减少成员变量的暴露,只提供getter和settter方法给外界访问,这样能提高类的安全性。具体使用与public类似。

注意事项

C++与Java不同,C++中的类没有公有私有之分,在使用时直接声明即可,访问权限限定符只用于修饰类的成员变量和成员函数。

参考资料

《C++ Primer》

https://www.cnblogs.com/dongsheng/p/3344011.html

https://blog.csdn.net/zxf529/article/details/1746728

原文地址:https://www.cnblogs.com/chenwx-jay/p/9649108.html

时间: 2024-08-24 11:04:41

C++之类成员的访问权限详解(一)的相关文章

scala 访问权限详解

private/protected [包名/类名/this] 即可指定变量的作用域.(this代表只有当前实例(即对象)可以访问) 伴生类和伴生对象中的成员可以相互访问. class PackageOps_Advanced{import PackageOps_Advanced.power private def canMakeItTrue = power >10001 } object PackageOps_Advanced{ private def power = 10000 def make

Linux文件权限详解

在Linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录. 通过设定权限可以从以下三种访问方式限制访问权限:只允许用户自己访问:允许一个预先指定的用户组中的用户访问:允许系统中的任何用户访问.同时,用户能够控制一个给定的文件或目录的访问程度.一个文件活目录可能有读.写及执行权限.当创建一个文件时,系统会自动地赋予文件所有者读和写的权限,这样可以允许所有者能够显示文件内容和修改文件.文件所有者可以将这些权限改变为任何他想指定的权限.一个文件也许只有读权限

Linux权限详解,多用户多组各种权限配置原理

网上有太多关于Linux权限详解,这里不啰嗦那些.主要解释下这些权限是杂用的,否则知道了什么用户.组之类的权限也配不好. 一.权限分类 r:读取权限,数字代号为"4". w:写入权限,数字代号为"2". x:执行或切换权限,数字代号为"1". -:不具任何权限,数字代号为"0". linux内每一段为r+w+x的值,最大777,见下图 二.权限在何时使用 目录写权限:可以增删目录内所有内容,改文件和目录名. 目录读权限:可以l

SQLServer 服务器角色和数据库角色权限详解

SQLServer中服务器角色和数据库角色权限详解 转自:http://blog.csdn.net/e_online/article/details/4597957 角色 当几个用户需要在某个特定的数据库中执行类似的动作时(这里没有相应的Windows用户组),就可以向该数据库中添加一个角色(role).数据库角色指定了可以访问相同数据库对象的一组数据库用户.数据库角色的成员可以分为如下几类:Windows用户组或用户账户SQL Server登录其他角色SQL Server的安全体系结构中包括了

SQLServer中服务器角色和数据库角色权限详解

SQLServer中服务器角色和数据库角色权限详解 by e-online 26. 九月 2009 18:55 coming from http://blog.csdn.net/e_online/article/details/4597957 角色 当几个用户需要在某个特定的数据库中执行类似的动作时(这里没有相应的Windows用户组),就可以向该数据库中添加一个角色(role).数据库角色指定了可以访问相同数据库对象的一组数据库用户. 数据库角色的成员可以分为如下几类: Windows用户组或

windows下权限详解——————【Badboy】

随着动网论坛的广泛应用和动网上传漏洞的被发现以及SQL注入式攻击越来越多的被使用,WEBSHELL让防火墙形同虚设,一台即使打了所有微软补丁.只 让80端口对外开放的WEB服务器也逃不过被黑的命运.难道我们真的无能为力了吗?其实,只要你弄明白了NTFS系统下的权限设置问题,我们可以对 crackers们说:NO! 要打造一台安全的WEB服务器,那么这台服务器就一定要使用NTFS和Windows NT/2000/2003.众所周知,Windows是一个支持多用户.多任务的操作系统,这是权限设置的基

Linux文件权限详解 文件和目录权限概述

Linux文件权限详解 文件和目录权限概述 在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录. 通过设定权限可以从以下三种访问方式限制访问权限:只允许用户自己访问:允许一个预先指定的用户组中的用户访问:允许系统中的任何用户访问.同时,用户能够控制一个给定的文件或目录的访问程度.一个文件活目录可能有读.写及执行权限.当创建一个文件时,系统会自动地赋予文件所有者读和写的权限,这样可以允许所有者能够显示文件内容和修改文件.文件所有者可以将这些权限改变

Linux 特殊权限详解

1.什么是特殊权限? 我们知道权限有r,w,x.其实除了这三个,还有特殊权限.比如: [[email protected] ~]# ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 22960 Jul 17  2006 /usr/bin/passwd 可以发现权限位,有个s.特殊权限有如下3种: SUID SGID STICKY 2.关于suid 我们知道linux有一个进程安全模型的概念,比如Tom执行passwd来进行修改密码: 第一,注意到passw

(赵小明RHCE笔记)linux基础之四 权限详解

一.special permissions for executables1.special permissions for executables:  -suid:command run with permissions of the owner of the command,not executor of   the command  -sgid:command runs with group affiliation of the group of the commandeg:file:us