C++中封装和继承的访问权限
众所周知,C++面向对象的三大特性为:封装,继承和多态。下面我们就先对封装做一些简单的了解。封装是通过C++中的类来完成的,类是一种将抽象转换为用户定义类型的工具。类的定义如下:
class circle
{
public: //成员变量
int m_L;
int m_H;
public: //成员函数(方法)
double get_Square()
{
return m_L*m_H;
}
}
在上面的代码中,我们定义了一个 "circle" 类,主要包含三个部分:成员变量,成员方法和访问控制(public, protect, private)。
- public:公共权限,类内可以访问,类外可以访问
- protected:保护权限,类内可以访问,类外不可以访问,继承的子类可以访问
- private:私有权限,类内可以访问, 类外不可以访问,继承的子类不可以访问
下面我们的对这三点进行测试,以加深印象:
class circle
{
public:
int public_L;
int public_H;
private:
int private_L;
int private_H;
protected:
int protect_L;
int protect_H;
public: //成员函数(方法)
circle() //通过构造函数对成员变量进行赋值
{
public_L = 20, public_H = 30;
private_L = 40, private_H = 50;
protect_L = 60, protect_L = 70;
}
double get_Square()
{
return private_L*private_H;
}
};
在定义的 "circle" 类中,由于变量 public_L,public_H 和 get_Square 都是公有权限,因此在类内类外均可访问,下面这两种写法均正确:
circle C1; //实例化类对象
double S_1 = C1.get_Square();
double S_2 = C1.public_H * C1.public_L;
但是,由于变量 private_L,private_H 均为私有权限, 因此在类内可以访问,即 get_Square() 能够访问,在类外下面的写法是错误的:
int S_3 = C1.private_H * C1.private_L; //Error:成员变量不可访问
同理,对于保护权限的变量,类内可以访问,类外不可访问:
int S_3 = C1.private_H * C1.private_L; //Error:成员变量不可访问
同样,继承的方式也有 public, protect, private 三种:
- public:公共继承,保持父类中成员的访问权限,继承到子类
- protected:保护继承,除私有权限外,父类中所有的成员都以保护权限的方式继承到子类
- private:私有继承,父类中所有的成员都以私有权限的方式继承到子类。
下面看一个例子:
class son1:public circle{
}; // 公有继承,保持 circle 父类中的访问权限不变
class son2:protected circle{
}; // 保护继承,除去 circle 父类中私有权限,其余成员你的的访问权限全部为保护权限
class son3:private circle{
}; // 私有继承,父类中所有成员的访问权限全部为私有权限
那么通过上述分析,
son1的访问权限与父类一致;son2只能在类内访问父类中的成员,但是他的子类中也可以通过public或者protected继承的方式访问到父类 "circle" 中的成员son3只能以私有的方式来继承父类中的成员
所以:
son1 s1;
s1.get_Square(); //访问public权限,正确
son2 s2;
s2.get_Square(); //Error:成员变量不可访问,protected权限
son3 s3;
s3.get_Square(); //Error:成员变量不可访问,private权限
C++中,类既可以用class 定义,也可以用struct定义。struct与class唯一的区别就在于默认访问权限不同struct默认为公共访问权限,Class默认为私有访问权限。举个例子:
class a
{
int m_a; //class 定义,未声明访问权限默认为private
};
struct b
{
int m_b; //struct 定义,未声明访问权限默认为public
};
于是:
a c_a;
c_a.m_a = 20; // Error: 成员变量不可访问
b s_b;
s_b.m_b = 20; // 正确,访问public类型变量
C++中封装和继承的访问权限的更多相关文章
- java中4种修饰符访问权限的区别及详解全过程
java中4种修饰符访问权限的区别及详解全过程 http://jingyan.baidu.com/article/fedf0737700b3335ac8977ca.html java中4中修饰符分别为 ...
- C++ 继承的访问权限
1.它解决什么问题?为什么设计出继承的各种访问权限? 可以这样认为,C++继承会把父类的东西拉到自己这里,这些东西都是自己的,父类中的字段和方法都有访问权限,如果我想改变这些东西的访问权限,该怎么办? ...
- this/super/static/final/匿名对象/继承/抽象类/访问权限修饰符
1.this关键字的作用 1)调用本类中的属性; 2)调用本类中的构造方法;且只能放首行,且必须留一个构造方法作为出口,即不能递归调用 3)表示当前对象; 2.匿名对象 ...
- java中封装,继承,多态,接口学习总结
### 一:封装java中封装是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问.要访问该类的代码和数据,必须通 ...
- 怎样提高Windows Azure Cloud Service中的WebRole的文件访问权限
关键字:WebRole 1. 背景 Web应用程序需要读取和写入该项目下的文件的权限. 在默认情况下,W3wp.exe 和WaIISHost.exe的运行账号是Network Service,而Net ...
- ethereum(以太坊)(二)--合约中属性和行为的访问权限
pragma solidity ^0.4.0; contract Test{ /* 属性的访问权限 priveta public internal defualt internal interlnal ...
- java中4种修饰符访问权限的区别
访问权限 类 本包 子类 其他包 public √ √ √ √ protected √ √ √ x default(缺省) √ √ x x private √ x x x
- Java中封装、继承和多态
封装: 封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度. 适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性. 访问修饰符有public,private,prot ...
- MVC 5 中Filter控制 action的访问权限
1,创建一个继承自 FilterAttribute, IActionFilter的类 namespace HeatMetering2.Filters { public class HMV2Authen ...
随机推荐
- Docker镜像讲解
Docker镜像讲解 镜像是什么 镜像是一种轻量级的,可执行的独立软件包,用来打包软件运行环境和基于运行环境的开发软件,它包含运行某个软件做需要的所有的内容,包括代码,运行时,库,环境变量和配置文件. ...
- js EventSource 长链接
有这么一个场景:服务端处理数据,响应比较慢,为了不让用户体会到网页没有反应,服务端需要把处理的每一步操作返回给前端,前端实时进行打印. 1.ajax 轮询 <script> setInte ...
- java并发编程:深入了解synchronized
简介 synchronized是Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码.同时它还保证了共享变量的内存可见性. ...
- 对Linux系统内核版本稳定性测试介绍
对Linux系统内核版本稳定性测试介绍 在对 Linux 内核版本稳定性的测试中,需要明确地声明并证明为什么版本是稳定的或者是不稳定的. 然而还没有被证明和证实当前现有的系统范围内的压力测试可以测试 ...
- 【转载】让KVM虚机能使用音箱与麦克风(vnc及ac97)
让KVM虚机能使用音箱与麦克风(vnc及ac97) 原 tantexian 发布于 2016/02/29 16:32 字数 462 阅读 164 收藏 0 点赞 1 评论 0 为什么80%的码农都做不 ...
- tar解压某个目录 tar解压某个指定的文件或者文件夹
tar解压某个目录 tar解压某个指定的文件或者文件夹 发布时间:2017-05-30 来源:服务器之家 1. 先查看压缩文档中有那些文件,如果都不清楚文件内容,然后就直接解压,这个是不可能的 使 ...
- Linux 部署 iSCSI 服务端
Linux 部署 iSCSI 服务端 服务端实验环境 iSCSI-server :RHEL8 IP:192.168.121.10 一.服务端安装 target 服务和 targetcli 命令行工具 ...
- OSI 七层参考模型与 TCP/IP 四层协议
OSI 七层参考模型 OSI (Open System Interconnect,开放系统互连参考模型)是由 ISO(国际标准化组织)定义的,它是个灵活的.稳健的和可互操作的模型,并不是协议,常用来分 ...
- mybatis 同时使用 XML 和注解
引言 学过 MyBatis 框架的童靴都知道, MyBatis 支持 XML 和注解两种方式配置,如下: 使用 XML 方式配置 只写明 XML 的 resource 路径(或者URL路径) < ...
- MYSQL导入/迁移后事件不执行
mysql迁移后事件不执行 查看数据库是否开启事件支持 mysql> show variables like 'event_scheduler'; +-----------------+---- ...