C++基礎-友元函數(friend class)


當基類中的函數被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);
}

 


免責聲明!

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



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