友元類和類中類的一些淺顯理解與對比
阿新 • • 發佈:2019-01-13
友元了,不管是友元類還是友元函式有應該特點是 比較鮮明的,這個特點就是不管是友元類還是友元函式他們具有一個單向的關係
你可以說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; }