友元關係的繼承

注意:以下內容僅由VS2013試驗得出,不一定符合ISO標準

基類的友元不繼承,即如果基類有友元類或友元函數,則其派生類不因繼承關係也有此友元類或友元函數。

如果基類是某類的友元,這種友元關係同樣不被繼承的,即其派生類不因繼承也成爲那個類的友元。


結論

1.基類的友元不一定是派生類的友元;

2.基類的成員是某類的友元,派生類不一定也是該類的友元。


試驗代碼

#include<iostream>
using namespace std;

class Class{// 有友元Friend和友元derivedFriend
    friend class Friend;
protected:
    int classData;
};

class derivedClass:public Class{// 基類Class有友元Friend,但是其派生類不繼承其友元關係,因此友元Friend不是derivedClass的友元
protected:
    int derivedClassData;
};

class Friend{// 是Class的友元不是derivedClass的友元
protected:
    int friendData;
public:
    void printClass(Class obj){ cout << "Class - " << obj.classData << endl; }
    void printDerivedClass(derivedClass obj){ cout << "derivedClass - " << obj.derivedClassData << endl; }// 錯誤:不可訪問
};

class derivedFriend:public Friend{// 基類Friend是Class的友元,那麼友元關係繼承,即derivedFriend也是Class的友元
protected:
    int derivedFriendData;
public:
    void printClass(Class obj){ cout << "Class - " << obj.classData << endl; }// 錯誤:不可訪問
};

void main(){

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章