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 ...
随机推荐
- Rabbit MQ一些参数解释
//ConnectionFactory(连接工厂): 生产Connection的的工厂 //Connection(连接):是RabbitMQ的socket的长链接,它封装了socket协议相关部分逻辑 ...
- 图扑软件正式加入腾讯智维生态发展计划,智能 IDC 开启数字经济新征程
4 月 23 日,主题为<智汇科技,维新至善>的腾讯数据中心智维技术研讨会在深圳胜利召开,发布了腾讯智维 2.0 技术体系,深度揭秘了智维 2.0 新产品战略和技术规划.图扑软件(High ...
- [网络编程之客户端/服务器架构,互联网通信协议,TCP协议]
[网络编程之客户端/服务器架构,互联网通信协议,TCP协议] 引子 网络编程 客户端/服务器架构 互联网通信协议 互联网的本质就是一系列的网络协议 OSI七层协议 tcp/ip五层模型 客户端/服务器 ...
- 『政善治』Postman工具 — 12、Postman中实现数据驱动
目录 1.什么是数据驱动? 2.测试集说明 3.创建请求与准备数据文件 (1)新增学院结果文档内容如下 (2)编写数据文件 (3)在Postman中创建请求 4.实现Postman中的数据驱动 步骤1 ...
- [bug] CDH 安装 Error : No matching Packages to list
信息 分析 我的系统是CentOS 7,而 cm 安装包是配合 redhat 6 的,应该选择 redhat 7 目录下的包 参考 https://community.cloudera.com/t5/ ...
- Docker------Linux安装Docker
1.添加yum源 yum install epel-release –y yum clean all yum list 2.安装并运行Docker yum install docker-io –y s ...
- ./g1.sh q w e r 5个参数 bash命令 获取 命令实际的参数 shell文件名称$0 第一个参数$1第2个参数$2 最后一个参数$#;参数个数$#个;所有的参数列出来$* 返回值$? 正确0 失败1
# ./g1.sh q w e r t./g1.sh q w e r5个参数number is q w e r t[root@localhost get]# cat g1.sh#!/bin/bash# ...
- 云计算OpenStack环境搭建(4)
准备工作: 准备3台机器,确保yum源是可用的,分别为控制节点(192.168.11.3).计算节点(192.168.11.4)和存储节点(192.168.11.5) 控制节点:OpenStack日常 ...
- shell初学之nginx(域名)
创建两个以域名区分的虚拟网站: 1 #!/bin/bash 2 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/ ...
- 【Java】Files.readAllBytes(Path) 遇见的坑
Files.readAllBytes(Path)方法把整个文件读入内存,此方法返回一个字节数组,还可以把结果传递给String的构造器,以便创建字符串输出. 在针对大文件的读取的时候,可能会出现内存不 ...