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

  • 相关阅读:
    POJ 2533 Longest Ordered Subsequence 最长上升子序列
    HDU 2059 龟兔赛跑 动态规划
    POJ 1328 Radar Installation 贪心
    动手动脑课后作业
    学生信息添加界面(连接数据库实现学生信息的存储)
    回文递归小测总结
    Java开学测试学生成绩管理系统
    动手动脑(第六周)
    Java课后总结原码、补码、反码
    如何在静态方法中访问实例对象
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/10208683.html
Copyright © 2011-2022 走看看