zoukankan      html  css  js  c++  java
  • [cpp]Friend关键字的作用

    Friend Class

    Friend class可以访问别的class中的private和protected成员,只要在这个类中声明了friend。 通常可以使部分类访问其他类中的一些私有成员,例如在链表中,链表class作为节点class的friend,可以访问其私有成员。

    class Node { 
    private: 
    	int key; 
    	Node* next; 
    
    	// 现在 class LinkedList 可以访问Node的私有成员了  
    	friend class LinkedList; 
    }; 
    

    Friend function

    像Friend class一样,friend function可以访问其他类中的private和protected成员,friend function可以是

    • 一个类的方法
    • 全局函数
    class Node { 
    private: 
    	int key; 
    	Node* next; 
    
        //只有LinkedList的search方法可以访问Node的内部成员
    	friend int LinkedList::search(); 
    	
    }; 
    
    

    一些要点

    • 不要滥用friend,这样降低了class的封装性。
    • Friend不是相互的,A是B的Friend,但B不能自动成为A的Friend。
    • Friend关系不能继承。

    Friend class的实例

    #include <iostream> 
    class A { 
    private: 
    	int a; 
    
    public: 
    	A() { a = 0; } 
    	friend class B; // Friend Class 
    }; 
    
    class B { 
    private: 
    	int b; 
    
    public: 
    	void showA(A& x) 
    	{ 
    		//B 是A的Friend,所以可以访问私有成员
    		std::cout << "A::a=" << x.a; 
    	} 
    }; 
    
    int main() 
    { 
    	A a; 
    	B b; 
    	b.showA(a); 
    	return 0; 
    } 
    
    

    Friend method的实例

    #include <iostream> 
    
    class B; 
    
    class A { 
    public: 
    	void showB(B&); 
    }; 
    
    class B { 
    private: 
    	int b; 
    
    public: 
    	B() { b = 0; } 
    	friend void A::showB(B& x); // Friend function 
    }; 
    
    void A::showB(B& x) 
    { 
    	//showB是 B的friend,所以可以访问私有成员
    	std::cout << "B::b = " << x.b; 
    } 
    
    int main() 
    { 
    	A a; 
    	B x; 
    	a.showB(x); 
    	return 0; 
    }
    
    

    Friend global function的实例

    #include <iostream> 
    
    class A { 
    	int a; 
    
    public: 
    	A() { a = 0; } 
    
    	// global friend function 
    	friend void showA(A&); 
    }; 
    
    void showA(A& x) 
    { 
    	//showA是A的Friend function,所以可以访问私有成员。
    	std::cout << "A::a=" << x.a; 
    } 
    
    int main() 
    { 
    	A a; 
    	showA(a); 
    	return 0; 
    }
    
    

    参考

    https://www.geeksforgeeks.org/friend-class-function-cpp/

  • 相关阅读:
    弱省胡策 Magic
    CF917D Stranger Trees
    【弱省胡策】Round #5 Count
    【BZOJ2117】 [2010国家集训队]Crash的旅游计划
    「2017 山东一轮集训 Day5」苹果树
    【SDOI2017】天才黑客
    【JXOI2018】守卫
    小程序两种图片加载方式
    小程序之底部栏设计
    小程序之全局变量的设置及使用
  • 原文地址:https://www.cnblogs.com/WAoyu/p/13157569.html
Copyright © 2011-2022 走看看