【c++】面向对象程序设计之访问控制与继承
受保护的成员(protected):
1.和私有成员类似,受保护的成员对于类的用户来说是不可访问的
2.和共有成员类似,受保护的成员对于派生类的成员和友元来说是可访问的
3.派生类的友元只能通过派生类对象来访问基类的受保护成员,不能通过基类对象来访问基类的受保护成员
class base
{
protected:
int pro;
}; class sneaky :public base
{
friend void clobber(sneaky&);
friend void clobber(base&);
int j;
};
//正确
void clobber(sneaky &s)
{
s.j = s.pro = ;
}
//错误
void clobber(base &b)//基类对象
{
b.pro = ;
}
派生访问说明符:
派生访问说明符对于派生类的成员(及友元)能否访问其直接基类的成员没影响,对基类成员的访问权限只与基类中的访问说明符有关。
派生访问说明符的目的是控制派生类用户即派生类对象对于基类成员的访问权限。若派生访问说明符是private(private继承),则基类中所有成员对于派生类对象来说是私有的。
友元与继承
就像友元关系不能传递一样,友元关系也不能继承。基类的友元在访问派生类成员时不具有特殊性,类似地,派生类的友元也不能随意访问基类的成员
class base
{
protected:
int pro;
friend class pal;
};
class sneaky :public base
{
friend void clobber(sneaky&);
friend void clobber(base&);
int j;
};
class pal
{
public:
int f(base b)//正确,pal是base的友元
{
return b.pro;
}
int f2(sneaky s)//错误
{
return s.j;
}
int f3(sneaky s)//正确,pal是base的友元,所以pal能够访问base对象的成员,
{//这种可访问性包括了base对象内嵌在其派生类中的情况
return s.pro;
} };
当一个类将另一个类声明为友元时,这种友元关系只对做出声明的类有效,对于原来那个类来说,其友元的基类或者派生类不具有特殊的访问能力。
默认的继承保护级别
默认派生运算符由定义派生类所用的关键字来决定,默认情况下,使用class关键字定义的派生类是私有继承的,而使用struct关键字定义的派生类是共有继承的。
class base{};
struct d1:base{};//默认public继承
class d2:base{};//默认privat继承
使用struct关键字和class关键字定义类的唯一的差别是默认成员访问说明符和默认派生访问说明符
总结:
1.派生类的友元只能通过派生类对象来访问基类的成员
2.派生访问说明符不影响派生类成员或友元对基类成员的访问,只影响派生类对象对基类成员的访问
3.基类的友元只能访问基类成员,不能访问派生类成员,但可以访问派生类对象中的基类部分
【c++】面向对象程序设计之访问控制与继承的更多相关文章
- JavaScript 面向对象程序设计(下)——继承与多态 【转】
JavaScript 面向对象程序设计(下)--继承与多态 前面我们讨论了如何在 JavaScript 语言中实现对私有实例成员.公有实例成员.私有静态成员.公有静态成员和静态类的封装.这次我们来讨论 ...
- Python基础(16)_面向对象程序设计(类、继承、派生、组合、接口)
一.面向过程程序设计与面向对象程序设计 面向过程的程序设计:核心是过程,过程就解决问题的步骤,基于该思想设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题的简单化,流程化 缺点: ...
- javascript之面向对象程序设计(对象和继承)
总结的文章略长,慎点. 知识点预热 引用类型:引用类型的值(对象)是引用类型的一个实例.在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起.在其他面向对象语言中被称为类,虽然 ...
- Python基础(17)_面向对象程序设计(抽象类、继承原理、封装、多态,绑定方法)
一.抽象类 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化 1.在python中实现抽象类 import abc #利用abc模块实现抽象类 class All_file(metacl ...
- 刘志梅 201771010115 《面向对象程序设计(java)》 第十八周学习总结
实验十八 总复习 实验时间 2018-12-30 1.实验理论知识 (1)第一个关键词:public称为访问修饰符,用于控制程序的其他部分对代码的访问级别. 第二个关键词:class表明java程序中 ...
- Java面向对象程序设计--与C++对比说明:系列3(Java 继承机制)
继承(inheritance)背后的核心思想是: bonus = b; } } Java没有像C++那样提供多继承机制,但提供了接口机制,在后面我们将详细探究接口机制的实现 ...
- 【c++】面向对象程序设计之关于继承
面向对象程序设计的核心思想是数据抽象(类的接口与实现分离).继承和动态绑定 基类 虚函数:基类希望派生类各自定义适合自身的版本的函数 在c++中,当我们使用基类的引用或指针调用虚函数时将发生动态绑定. ...
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- JAVA课程实验报告 实验二 Java面向对象程序设计
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩: 指导教师:娄嘉 ...
随机推荐
- echo - 显示一行文本
SYNOPSIS(总览) echo[OPTION]... [STRING]... DESCRIPTION(描述) 允许在标准输出上显示STRING(s). -n 不输出行尾的换行符. -e 允许对下面 ...
- uva12433 Rent a Car
init 一开始搞成2*n+2了...囧 所以初始化很重要! 然后提交的时候忘了删调试的数据了..囧 技巧:设立虚拟节点 建图比较麻烦(非常). 要考虑到保养完了的车可以免费再用 设立S,T ,1 ...
- css 两列 左侧列固定 width: 100px; float: left; 右侧列自适应 margin-left:100px; 注意要用在div上的style
css 两列 左侧列固定 width: 100px; float: left; 右侧列自适应 margin-left:100px; 注意要用在div上的style .con1{ width: 100p ...
- MFC中EDIT控件实现换行
\n是C下的回撤换行.在MFC下得用\r\n.
- 日常:论我的T3是如何苟掉的
说起来都是泪啊 T3的bfs一直不对,我想死. 考试时候苟了两个小时,死活找不到错误(因为lca和离散化都码出来了,太乱) 最后把bfs单独提出来,发现在bfs里面输出的f[ly][0]都是正确的,到 ...
- 安装docker和docker-compose
环境:centos7,参考官方文档:https://docs.docker.com/insta... 第一步:删除旧版本和相关依赖,运行命令: yum remove docker \ docker ...
- GC相关的面试题
问题:Object的finaliz()方法 的作用是否与C++的析构函数作用相同? --->不同的 1.C++的析构函数调用确定,就是对象离开作用域之后就马上被删除.而java Object的f ...
- API对接中经常会出现的签名获取,这只是某一种,仅供给有需要的人参考
要求: 1.对所有传入参数(含系统参数和接口参数)按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值对的格式.(即 key1=value1&key2=value2…)拼接 ...
- Mybatis中实体类属性和数据列之间映射的四种办法
http://blog.csdn.net/lmy86263/article/details/53150091 Mybatis不像hibernate中那么自动化,通过@Column注解或者直接使用实体类 ...
- NowCoder小杰的签到题(模拟,思维)
链接: https://www.nowcoder.com/acm/contest/52/M 题意: 给定n个队伍的到场时间, 有3个报道位, 每个队伍报道需要b时间, 求所有报道完成的时间. 分析: ...