C++:49---继承中的友元

一、友元在继承中的关系

  • 我们在友元的文章中介绍过,友元关系不能继承。

  • (1)友元关系不存在传递性,即每个类负责控制自己的友元类或者友元函数;

  • (2)友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。

  • (3)友元关系不能被继承。

  • 因此:

    • 基类的友元不能访问派生类的新成员,但是仍可以访问派生类从基类继承而来的成员/方法

    • 派生类的友元也不能随意访问基类的成员

二、演示案例

class A {private:int a;friend class C;};class B :public A {private:int b;};class C {public:int f(A a) { return a.a; };  //正确,因为C是A的友元,可以访问其任何成员int f2(B b) { return b.a; }; //正确,因为B继承了A,所以B中也包含了A的aint f3(B b) { return b.b; }; //错误,C不是B的友元,不能访问其私有成员};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444325.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode383. 赎金信

给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回 true ;否则返回 false。 (题目说明:为了不暴露赎金信字迹,要从…

C++:52---多重继承

一、多重继承概念 多重继承是指:从多个直接基类而产生派生类的能力例如:class ZooAnimal {}; //动物class Endangered {}; //濒临灭绝的动物class Bear :public ZooAnimal {}; //熊 //多重继承 class Panda :public Bear, public Endangered {}; //熊猫二、多重继承的语法 继…

关于jsp页面显示的时间格式和Oracle数据库中的格式不一样的问题

今天我遇到一个问题:就是数据库存的时间格式是:2013-06-28 11-00-17 ,但是通过查询在jsp页面上显示出来是:2013-06-28 11-00-17.0 就是多了一个.0,之后通过查资料解决了这个问题,现在写出来和大家分享一下…

C++:50---虚析构函数

一、引入 如果通过一个基类指针申请一个派生类对象,那么在通过这个指针释放对象的时候,要求基类的虚函数是virtual的 。二、虚析构函数 使用方法和规则与虚函数一样格式要求:虚析构函数要求基类与派生类中的名称不一致只要基类的析构函数是虚函数,就能确保我们在释放指针时…

C++:51---继承中的构造函数、析构函数、拷贝控制一系列规则

一、继承中的构造函数 根据构造函数的执行流程我们知道:派生类定义时,先执行基类的构造函数,再执行派生类的构造函数拷贝构造函数与上面是相同的原理二、继承中的析构函数 根据析构函数的执行流程我们知道:派生类释放时,先执行派生类的析构函数,再执行基类的析构函数二、…

leetcode434. 字符串中的单词数

统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。 请注意,你可以假定字符串里不包括任何不可打印的字符。 示例: 输入: "Hello, my name is John" 输出: 5 思路:本位是字母,前面是空格(或…

Redis:15---键迁移(move、dump、restore、migrate)

键迁移概述:键迁移就是把数据由一个Redis迁移到另一个Redis(例如从生产环境迁移到测试环境),或者在数据库之间进行迁移键迁移有三种方式:move、dumprestore、migrate下面是三种方式的比较,建议使用migrate&…

Redis:18---常用功能之(Lua脚本)

为了保证多条命令组合的原子性,Redis提供了简单的事务功能以及集成Lua脚本来解决这个问题,本文介绍Lua,事务已经在前一篇文章介绍过了一、Lua概述 Lua语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式程序移植到其他应用程序,它是由C语言实现的,虽然简单…

leetcode414. 第三大的数

给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2: 输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数…

Redis:17---常用功能之(事务)

为了保证多条命令组合的原子性,Redis提供了简单的事务功能以及集成Lua脚本来解决这个问题,本文介绍Redis事务,Lua在下一篇文章介绍一、事务概述简单地说,事务表示一组动作,要么全部执行,要么全部不执行。例…

leetcode448. 找到所有数组中消失的数字 天秀记录法

给定一个范围在 1 ≤ a[i] ≤ n ( n 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回…

Redis:12---有序集合对象

一、有序集合对象概述它保留了集合不能有重复成员的特性, 但不同的是,有序集合中的元素可以排序。但是它和列表使用索引下标作为排序依据不同的是,它给每个元素设置一个分数(score)作为排序的依据如下图所示&#xff0…

Redis:14---常用功能之(Pipeline)

一、Pipeline概述 Redis客户端执行一条命令分为如下四个过程:1.发送命令2.命令排队3.命令执行4.返回结果其中1+4称为Round Trip Time(RTT,往返时间)Pipeline概述 Redis提供了批量操作命令(例如mget、mset等),有效地节约RTT。但大部分命令是不支持批量操作的,例如要执行…

leetcode170. 两数之和 III - 数据结构设计

设计并实现一个 TwoSum 的类,使该类需要支持 add 和 find 的操作。 add 操作 - 对内部数据结构增加一个数。 find 操作 - 寻找内部数据结构中是否存在一对整数,使得两数之和与给定的数相等。 示例 1: add(1); add(3); add(5); find(4) -> true fi…

Redis:11---Set对象

集合类型 (Set) 是一个无序并唯一的键值集合。它的存储顺序不会按照插入的先后顺序进行存储。 集合类型和列表类型的区别如下: 列表可以存储重复元素,集合只能存储非重复元素;列表是按照元素的先后顺序存储元素的,而集合则是无序方式存储元素的。一、集合对象概述 特点:集…

Oracle中计算两个时间的时间差:

计算时间差是oracledata数据类型的一个常见问题。oracle支持日期计算,你可以创建诸如“日期1-日期2”这样的表达式来计算这两个日期之间的时间差。一旦你发现了时间差异,你可以使用简单的技巧来以天、小时、分钟或者秒为单位来计算时间差。为…

Redis:13--常用功能之redis-cli redis-server等命令

Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。它们 虽然比较简单,但是麻雀虽小五脏俱全,有时可以很巧妙地解决一些问题一、redis-cli在前面数据库连接的时候已经redis-cli的-h、-p参数,除了这些参数,还有很多…

Redis:16---常用功能之(慢查询日志)

一、慢查询日志介绍 许多存储系统(例如MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息记录下来,Redis也提供了类似的功能Redis的慢查询日志功能用于记…

leetcode256. 粉刷房子

假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花…

Redis:21---客户端相关配置篇

一、客户端相关配置①客户端的限制maxclientsRedis提供了maxclients参数来限制最大客户端连接数,一旦连接数超过 maxclients,新的连接将被拒绝maxclients默认值是10000可以通过info clients来查询当前Redis的连接数:可以通过config set maxcl…