當基類中的函數被protected的時候,只有繼承的子類才能訪問,為了使得非繼承的類也可以使用,使用friend class (類名)來進行操作
#include <iostream> using namespace std; class Lover{ public: Lover(string theName); void kiss(Lover *lover); void ask(Lover *lover, string something); protected: string name; friend class Others; //構造友元函數, 使得Others可以調用name屬性 }; Lover::Lover(string theName) { name = theName; } void Lover::kiss(Lover *lover) { cout << name << "kiss" << lover->name << endl; } void Lover::ask(Lover *lover, string something){ cout << name << "ask" << lover->name << "do" << something << endl; } class Boyfriend:public Lover { public: Boyfriend(string theName); }; Boyfriend::Boyfriend(string theName) : Lover(theName){ //進行有參數的繼承 } class Girlfriend:public Lover { public: Girlfriend(string theName); }; Girlfriend::Girlfriend(string theName) : Lover(theName){} class Others { public: Others(string theName); void kiss(Lover *lover); protected: string name; }; Others::Others(string theName) { name = theName; } void Others::kiss(Lover *lover) { cout << name << "親一下" << lover->name << endl; //因為name是protected, 如果沒有友元就不能進行訪問 } int main() { Boyfriend boyfriend("A君"); Girlfriend girlfriend("B妞"); Others others("路人甲"); girlfriend.kiss(&boyfriend); girlfriend.ask(&boyfriend, "洗衣服啦"); cout << "\n當當當:傳說的路人甲登場...\n"; others.kiss(&girlfriend); }