friend關鍵字
C++學習筆記:friend ostream &operator<<(ostream &stream, const Date& dt);
friend關鍵字
c++中有個friend關鍵字,它能讓被修飾的物件衝破本class的封裝特性,從而能夠訪問本class的私有物件。
簡單來講,就是:
如果你在A類中,申明瞭函式func()是你的friend,那麼func()就可以使用A類的所有成員變數,無論它在什麼地方定義的。
如果你在A類中,申明瞭B類是你的friend,那麼B類中的方法就可以訪問A類的所有成員變數。
#include<iostream>
using namespace std;
class A {
public:
A() {
password = 1111;
birthday = 808;
}
~A() { }
friend int func(A a); // 向c++表示,int func(A a)是我的朋友,所以它可以使用我的所有東西。
friend class B; // 向c++表示,class B是我的朋友,所以它可以使用我的所有東西。
private:
int password;
int birthday;
};
int func(A a) {
cout << a.password << " and " << a.birthday << endl; //可以訪問
a.password = 1; //甚至可以修改
cout << a.password << endl;
return 0;
}
class B {
public:
B() { }
~B() { }
// 因為在A類中已經宣告瞭B類是它的朋友,所以B類中方法就可以訪問A類的私有變數了
void show(A a) {
cout << "your account is " << a.account << " and with pass: " << a.password << endl;
}
private:
};
int main() {
A a;
func(a);
B b;
b.show(a);
system("pause");
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
運用friend過載 << 或者 >>操作
利用這一點,我們就可以過載<< 或者 >>操作,
#include<iostream>
using namespace std;
class A {
public:
A() {
password = 1111;
account = 808;
}
~A() { }
friend ostream& operator << (ostream &os , A a);
private:
int password;
int account;
};
ostream& operator << (ostream &os , A a) {
os << "your account is " << a.account << " and with pass: " << a.password << endl;
return os;
}
int main() {
A a;
cout << a;
system("pause");
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
結果:
相關文章
- DM 關鍵字、遮蔽關鍵字
- let關鍵字和const關鍵字
- final關鍵字和static關鍵字
- this關鍵字
- 關鍵字
- out關鍵字和ref關鍵字的區別
- abstract關鍵字 super 關鍵字 類與繼承繼承
- 4關鍵字
- [JavaScript] this 關鍵字JavaScript
- synchronized 關鍵字synchronized
- Volatile關鍵字
- static關鍵字
- final關鍵字
- super關鍵字
- const關鍵字
- Voliate關鍵字
- Auto關鍵字
- Swift 關鍵字Swift
- defer關鍵字
- typedef關鍵字
- params關鍵字
- throw關鍵字
- dynamic關鍵字
- volatile 關鍵字
- @Transient關鍵字
- synchronize關鍵字 原理
- 各類關鍵字
- Google關鍵字工具Go
- Java native關鍵字Java
- java中this關鍵字Java
- volatile關鍵字解析
- volidate關鍵字解析
- Synchronize 關鍵字原理
- [java]transient關鍵字Java
- Volatile關鍵字剖析
- 使用 Synchronized 關鍵字synchronized
- c#關鍵字C#
- Java Final關鍵字Java