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

  • 相关阅读:
    php递归无限分类、根据子类获取所有顶类
    PHP+Redis 有序集合实现 24 小时排行榜实时更新
    php操作redis常用方法代码示例
    Mysql 数据库默认值选 ''" 、Null和Empty String的区别
    linux查看端口占用情况
    php获取微信openid
    phpstorm 删除空行
    git常用操作命令归纳
    Redis数据类型
    渴求式加载指定字段、加载多个关联关系、嵌套的渴求式加载、带条件约束的渴求式加载
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/10208683.html
Copyright © 2011-2022 走看看