zoukankan      html  css  js  c++  java
  • c/c++ 继承与多态 友元与继承

    问题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

  • 相关阅读:
    unity 颜色空间
    Shader 常用常量 函数等
    Unity3d cg Shader 相关的方法
    DirectX HLSL Shader 内置函数
    unity texture2d 图片尺寸压缩
    Unity中Zxing生成二维码只能生成256大小图片的解决方案
    读取保存 调用系统选框 仅限Win/Mac/WebGL
    Unity编辑器中递归设置文件夹下资源的 AssetBundle Tag 可多选
    扣绿幕Shader(可自选颜色)
    智能手环体验:UP24
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/10208683.html
Copyright © 2011-2022 走看看