受保护的成员(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++】面向对象程序设计之访问控制与继承的更多相关文章

  1. JavaScript 面向对象程序设计(下)——继承与多态 【转】

    JavaScript 面向对象程序设计(下)--继承与多态 前面我们讨论了如何在 JavaScript 语言中实现对私有实例成员.公有实例成员.私有静态成员.公有静态成员和静态类的封装.这次我们来讨论 ...

  2. Python基础(16)_面向对象程序设计(类、继承、派生、组合、接口)

    一.面向过程程序设计与面向对象程序设计 面向过程的程序设计:核心是过程,过程就解决问题的步骤,基于该思想设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题的简单化,流程化 缺点: ...

  3. javascript之面向对象程序设计(对象和继承)

    总结的文章略长,慎点. 知识点预热 引用类型:引用类型的值(对象)是引用类型的一个实例.在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起.在其他面向对象语言中被称为类,虽然 ...

  4. Python基础(17)_面向对象程序设计(抽象类、继承原理、封装、多态,绑定方法)

    一.抽象类 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化 1.在python中实现抽象类 import abc #利用abc模块实现抽象类 class All_file(metacl ...

  5. 刘志梅 201771010115 《面向对象程序设计(java)》 第十八周学习总结

    实验十八 总复习 实验时间 2018-12-30 1.实验理论知识 (1)第一个关键词:public称为访问修饰符,用于控制程序的其他部分对代码的访问级别. 第二个关键词:class表明java程序中 ...

  6. Java面向对象程序设计--与C++对比说明:系列3(Java 继承机制)

    继承(inheritance)背后的核心思想是:       bonus = b;    }      } Java没有像C++那样提供多继承机制,但提供了接口机制,在后面我们将详细探究接口机制的实现 ...

  7. 【c++】面向对象程序设计之关于继承

    面向对象程序设计的核心思想是数据抽象(类的接口与实现分离).继承和动态绑定 基类 虚函数:基类希望派生类各自定义适合自身的版本的函数 在c++中,当我们使用基类的引用或指针调用虚函数时将发生动态绑定. ...

  8. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  9. JAVA课程实验报告 实验二 Java面向对象程序设计

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

随机推荐

  1. (三)docker 的启动,重启,关闭命令

    docker启动命令,docker重启命令,docker关闭命令  启动    systemctl start docker 守护进程重启 sudo systemctl daemon-reload 重 ...

  2. Python3基础教程(十八)—— 测试

    编写测试检验应用程序所有不同的功能.每一个测试集中在一个关注点上验证结果是不是期望的.定期执行测试确保应用程序按预期的工作.当测试覆盖很大的时候,通过运行测试你就有自信确保修改点和新增点不会影响应用程 ...

  3. vscode vue template 下 style 的样式自动提示 #bug 这个搞完vue语法esLint就又不好使了,ERR

    网上都是 "*.vue": "vue",改成"*.vue": "html" 就ok了   "files.ass ...

  4. 【转】Delphi 2010 Lite加装帮助文件

    基于爱好,下载了一个delphi 2010 lite,业余玩玩. 不过这东西是网友重新打包的,没有带帮助.在网上搜索一下加摸索后搞定.步骤如下: Delphi 2010本身的帮助(MSDN风格的)1. ...

  5. RNN静态与动态

    静态.多层RNN:import numpy as np import tensorflow as tf # 导入 MINST 数据集 from tensorflow.examples.tutorial ...

  6. SQL分组聚合查询练习(SQL Server和Oracle相似)20190514

    先建表 CREATE TABLE [dbo].[orderdt_jimmy]( ,) NOT NULL, [order_nid] [int] NOT NULL, ) NOT NULL, [qty] [ ...

  7. 《3+1团队》【Alpha】Scrum meeting 2

    项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 3+1团队 团队博客地址 https://home.cnblogs.com/u/3-1group ...

  8. <c:forEach>实例演示

    <c:forEach>实例演示 <%@ page language="java" contentType="text/html; charset=UTF ...

  9. 502 bad gateway nginx

    此方法可能仅对于我的问题有效 我在VMware虚拟机启动docker container nginx的,一开始启动nginx的contatiner,在浏览器是可以正常访问的,但次日重新访问时就报502 ...

  10. 交叉编译OpenCV的教程——基于aarch64-linux-gnu的交叉编译器

    1.获取OpenCV3.3.1的源码 地址:https://pan.baidu.com/s/1lnKDThiWg-2QDXNEzVAqrA 提取码:vmn4 2.解压源码包 命令:unzip open ...