問題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