C++快速入門---友元關係(14)
阿新 • • 發佈:2018-11-04
C++快速入門---友元關係(14)
友元關係是類之間的一種關係。
這種關係不僅允許友元類訪問對方的public方法和屬性,還允許友元訪問對方的protected和private方法和屬性。
程式碼如下:
others不是lovers的子類,在others::kiss()訪問不了屬性name。因為在基類Lovers和Others類,定義了一種友元關係。
#include <iostream> #include <string> //一對戀人 基類 class Lovers { public: Lovers(std::string theName); void kiss(Lovers *lover); void ask(Lovers *lover, std::string something); protected: std::string name; friend class Others; //禍根,交友不慎。。。 }; class Boyfriend : public Lovers { public: Boyfriend(std::string theName); }; class Girlfriend : public Lovers { public: Girlfriend(std::string theName); }; //路人甲 class Others { public: Others(std::string theName); void kiss(Lovers *lover); protected: std::string name; }; Lovers::Lovers(std::string theName) { name = theName; } void Lovers::kiss(Lovers *lover) { std::cout << name << "親親我們家的" << lover->name << std::endl; } void Lovers::ask(Lovers *lover, std::string something) { std::cout << "寶貝兒" << lover->name << "愛我" << something << std::endl; } Boyfriend::Boyfriend(std::string theName) : Lovers(theName) { } Girlfriend::Girlfriend(std::string theName) : Lovers(theName) { } Others::Others(std::string theName) { name = theName; } void Others::kiss(Lovers *lover) { std::cout << name << "親一下" << lover->name << std::endl; } int main() { Boyfriend boyfriend("A君"); Girlfriend girlfriend("B妞"); Others others("路人甲"); girlfriend.kiss(&boyfriend); girlfriend.ask(&boyfriend, "洗衣服啦"); std::cout << "\n噹噹噹當! 傳說中的路人甲登場。。。。。。\n"; others.kiss(&girlfriend); return 0; }