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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM