问题1:类B是类A的友元类,类C是类B的友元类,那么类C是类A的友元类吗?函数fun是类B的友元函数,那么fun是类A的友元函数吗?

都不是,友元关系不能传递。

问题2:类B是类A的友元类,类C是类B的子类,那么类C是类A的友元类吗?

不是,友元关系不能继承。

问题3:类A_Fri是类A的友元类,类B是类A的子类,那么在类A_Fri的成员方法里,

(1)可以用类A的对象访问类A的私有成员吗?

(2)可以用类B的对象访问类B的私有成员吗?

(3)可以用类B的对象访问类A的私有成员吗?

(1)可以。因为A_Fri是类A的友元类。

(2)不可以。因为A_Fri不是类B的友元类。因此可以看出,友元关系不能继承。

(3)如果类B用public方式继承类A,答案是可以的。这一点比较怪,因为类B是public方式继承的类A,所以类B的对象里,类A的部分的成员属性没有变化。如果类B用非public方式继承类A,答案是不可以的。

class Base{
friend class Friend;
public:
void pub_mem();
protected:
int prot_mem;
private:
char pri_mem;
}; class D : public Base{
private:
int j;
}; class Friend{
friend class C;
friend void fri(Base& b);
int f(Base& b){
return b.pri_mem;//问题3的(1)
}
int f1(D& d){
//return d.j;//问题3的(2)
}
int f2(D& d){
return d.pri_mem;//问题3的(3)
}
}; class Bom : public Friend{
int mem(Base& b){
//return b.pri_mem;//问题2,友元关系不能继承。
}
}; void fri(Base& b){
//b.pri_mem;//问题1,友元关系不能传递
}
class C{
int f(Base& b){ //return b.pri_mem;//问题1,友元关系不能传递
}
};
int main(){ }

github

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

c/c++ 继承与多态 友元与继承的更多相关文章

  1. c/c++ 继承与多态 容器与继承3

    c/c++ 继承与多态 容器与继承2 巩固了容器里放智能指针的用法,但是有个问题,对于使用Basket类的用户来说,必须添加的是智能指针,如果能直接添加一个普通的类的对象的话,用起来就方便的多了,所以 ...

  2. c/c++ 继承与多态 容器与继承2

    c/c++ 继承与多态 容器与继承1说明了容器里使用继承关系的方法,这里再弄一个练习,巩固一下. 做一个类Basket,它有个multiset成员,key是智能指针std::shared_ptr< ...

  3. lua面向对象实现(实例化对象、继承、多态、多继承、单例模式)

    lua面向对象实现: 一个类就像是一个创建对象的模具.有些面向对象语言提供了类的概念,在这些语言中每个对象都是某个特定类的实例.lua则没有类的概念,每个对象只能自定义行为和形态.不过,要在lua中模 ...

  4. c/c++ 继承与多态 容器与继承1

    问题:类B公有继承类A,类A有虚函数fun,类B覆盖了虚函数fun,有一个std::vector<A>,添加A的对象a,和B的对象b,到这个容器里,然后从vector里取出来,使用对象a. ...

  5. Java学习笔记 07 接口、继承与多态

    一.类的继承 继承的好处 >>使整个程序架构具有一定的弹性,在程序中复用一些已经定义完善的类不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性 继承的基本思想 >>基 ...

  6. Java的三大特性:封装、继承、多态

    一.类的概念: 类一般包括两个部分:属性(成员变量)和方法(成员方法)方法组成部分:修饰符(可选) 返回值类型(必须) 方法名(必须)参数列表(可选) package com.classTest.pr ...

  7. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  8. Python面向对象:继承和多态

    继承与多态简介: 继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写. 动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的. ...

  9. Java入门系列(三)面向对象三大特性之封装、继承、多态

    面向对象综述 封装 封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项,或者叫接口. 有了封装,就可以明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用者:而外部调用者也可以知道 ...

随机推荐

  1. 使用google搜索时的10个小技巧!

    为大家分享一些google的技巧,很多工作了好几年的同学还不知道如何高效的利用这些技巧,希望同学们掌握!此为google的技巧,百度现在也基本上都实现了这些功能.   使用搜索引擎的10个搜索技巧   ...

  2. Java IO流读取文件

    使用指定编码读取文件 public static String toString(File file, String charset){ StringBuilder result = new Stri ...

  3. python编译、运行、反编译pyc文件

    为了加密 .py 文件,以前一般使用打包成 exe ,但是最近发现可以将其编译成二进制文件 pyc ,虽然反编译难度不大,但是也需要一些水平 编译生成 pyc: 单个文件 代码: import py_ ...

  4. [转]基于.NET平台常用的框架整理

    自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就 ...

  5. Nancy in .NET Core学习笔记 - 路由

    前文中,我介绍了Nancy的来源和优点,并创建了一个简单的Nancy应用,在网页中输出了一个"Hello World",本篇我来总结一下Nancy中的路由 Nancy中的路由的定义 ...

  6. sql server 性能调优之 SQL语句阻塞查询

    在生产环境下,有时公司客服反映网页半天打不到,除了在浏览器按F12的Network响应来排查,确定web服务器无故障后.就需要检查数据库是否有出现阻塞 当时数据库的生产环境中主表数据量超过2000w, ...

  7. webpack 2 系列

    webpack 2 系列 webpack 是一个强大的工具,学会通过工具来解决开发效率问题,是每一个 工程师都必备的技能之一. 那么我们来从零开始搭建一个 基于webpack 2 到 开发架子,来提升 ...

  8. LeetCode专题-Python实现之第1题:Two Sum

    导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...

  9. [九]JavaIO之ObjectInputStream 和 ObjectOutputStream

    序列化 序列化是指把Java对象保存为二进制字节码的过程,Java反序列化是指把二进制码重新转换成Java对象的过程 序列化是一种轻量级的持久化,对象都是存活在内存中的,当JVM运行结束,对象便不存在 ...

  10. Nginx的负载均衡

    什么是负载均衡 负载均衡主要通过专门的硬件设备或者通过软件算法实现.通过硬件设备实现的负载均衡效果好.效率高.性能稳定,但是成本比较高.通过软件实现的负载均衡主要依赖于均衡算法的选择和程序的健壮性.均 ...