1. 程式人生 > >友元類和類中類的一些淺顯理解與對比

友元類和類中類的一些淺顯理解與對比

友元了,不管是友元類還是友元函式有應該特點是 比較鮮明的,這個特點就是不管是友元類還是友元函式他們具有一個單向的關係
你可以說a是b的友元,但是你無法說b是a的友元
看一個時間日期類來理解一下吧

class date;
class time{
	friend class date;
public:
	time(int hour, int minute, int second)
		:_year(hour)
		, _minute(minute)
		, _second(second)
	{

	}
private:
	int _year;
	int _minute;
	int _second;
};
class date{
public:
	date(int year, int month, int day)
		: _year(year),
		_month(month), 
		_day(day)   {}
	void getistime(int hour, int minute ,int second)
	{
		_t._hour = hour;
		_t._mintue = minute;
		_t._second = second;

	}
private:
	int _year;
	int _month;
	int _day;
	time _t;
};
int main()
{
	date d(1200, 1, 12);
	d.getistime(12, 18, 67);
	return 0;

}

再來看一下類中類吧
類中類外部類並沒有什麼優先的訪問許可權,更不能通過外部類去呼叫類不類
*內部類是外部類的友元類,內部類可以通過外部類的成員來訪問外部類的所有成員

class A {
private:   
	static int k;   
	int h;
public:  
		class B{
public:       
	void foo(const A& a)      
	{
				
		cout << k << endl;//OK        
		cout << a.h << endl;//OK      
	}  
		};
};

int A::k = 1;
int main()
{	
	A::B b;  
	b.foo(A());    
	return 0; 
}