C++之友元成員
友元成員分類:
1.友元函式
如果把一個獨立函式說明為類的友元,則該函式成為類的友元函式,友元函式可以訪問類的私有變數。
一般模板為:friend 函式原型宣告;
示例如下:
#include <iostream>
using namespace std;
class student{
private:
int id,score;
char *name;
public:
void play_information();//顯示學生學號、姓名、成績
friend void set_inform(student &stu,int id,char *name,int score);//友元函式說明
};
void student::play_information()
{
cout<<"學號:"<<id<<'\t'<<"姓名:"<<name<<'\t'<<"成績:"<<score<<endl;
}
void set_inform(student &stu,int id,char *name,int score)//學生資訊錄入
{
stu.id = id;
stu.name = name;
stu.score = score;
}
void main()
{
student stu;
set_inform(stu,1001,"陳 紅",100);
stu.play_information();
}
執行結果:學號:1001 姓名:陳 紅 成績:100
程式說明:在本例中,獨立函式set_inform(student &stu,int id,char *name,int score)
即為友元函式,可以訪問物件stu
的私有變數。
2.友元成員函式
友元成員函式是類之間而言的,即一個類teacher
中的成員函式在另一個類student
中被宣告為友元,則該函式被稱為友元成員函式,且類teacher
中的該函式可以訪問student
中的成員變數。
一般模板為:friend 返回值型別 所屬類名::函式名(引數);
示例如下:
#include <iostream>
using namespace std;
class student;
class teacher{
public:
void set_inform(student &stu, int id, char *name, int score);
void show_inform(student stu);
};
class student{
private:
int id, score;
char *name;
public:
friend void teacher::set_inform(student &stu, int id, char *name, int score);//友元成員函式說明
friend void teacher::show_inform(student stu);//友元成員函式說明
};
void teacher::set_inform(student &stu, int id, char *name, int score)
{
stu.id = id;
stu.name = name;
stu.score = score;
}
void teacher::show_inform(student stu)
{
cout << "學號:" << stu.id << '\t' << "姓名:" << stu.name << '\t' << "成績:" << stu.score << endl;
}
void main()
{
student stu;
teacher teach;
teach.set_inform(stu, 1002, "張大山", 99);
teach.show_inform(stu);
}
執行結果:
學號:1002 姓名:張大山 成績:99
程式說明:在本例中teacher
中的兩個成員函式set_inform(student &stu, int id, char *name, int score)
和show_inform(student stu)
都在student
中被宣告為友元,因此這兩個函式都是友元函式,均可訪問student
中的私有成員變數。
注:友元成員函式在visual2013中會出現問題,表現在IntelliSense
顯示紅色波浪線的警告,友元成員函式在定義過程中呼叫另一個類的私有變數時顯示警告,如stu.id = id; stu.name = name; stu.score = score;
均會有紅色波浪線提示不可訪問,但是並不影響程式的正常編譯,也就是程式可以執行。(很多教材中並沒有提及友元成員函式,我想這裡示例中的IntelliSense
波浪線警告可以看出這種寫法不太合適,後來百度上某位大佬指點說是微軟不支援這種寫法,具體原因見:https://zhidao.baidu.com/question/1303726966589368499.html
)
3.友元類
友元類是兩個類之間的關係,若某一類teacher
是另一個類student
的友元,則類teacher
中的成員函式可以訪問student
類中的變數。
一般模板為:friend class 類名;
示例如下:
#include <iostream>
class student{
private:
int id, score;
char *name;
friend class teacher;//宣告友元類 teacher
};
class teacher{
private:
public:
void set_score(student &stu);
void play_score(student &stu);
};
void teacher::set_score(student &stu)
{
char *na = new char[20];//動態申請空間
int d, x;
std::cout << "please enter the information:";
std::cin >> d >> na >> x;//依次輸入學號、姓名、成績
stu.id = d;
stu.name = na;
stu.score = x;
}
void teacher::play_score(student &stu)
{
std::cout << "學號\t" << "姓名\t" << "成績" << std::endl;
std::cout << stu.id << '\t' << stu.name << '\t' << stu.score << std::endl;
}
void main()
{
student stu;
teacher t;
t.set_score(stu);
t.play_score(stu);
}
執行結果:
please enter the information:1001 陳紅 100
學號 姓名 成績
1001 陳紅 100
程式說明:teacher
類是student
的友元類,所以teacher
類中的兩個成員函式都可以訪問student
中的變數並對所申明的相關物件進行定義操作。
相關文章
- 其他成員與友元
- C++類中的常成員和靜態成員C++
- C++ 類成員指標C++指標
- C++類靜態成員C++
- C++的成員指標C++指標
- C++中的成員物件C++物件
- C++ 類成員函式C++函式
- C++中的static成員、static const成員和const成員的初始化C++
- c++類的靜態成員C++
- c++中的靜態成員C++
- C++ 靜態資料成員C++
- C++:類的成員函式C++函式
- C++:類的靜態成員C++
- c++ const 成員函式C++函式
- C++ 類的靜態成員C++
- c++成員變數初始化C++變數
- C++ 成員資料指標成員函式指標簡單測試C++指標函式
- [C++之旅] 14 物件成員與物件陣列C++物件陣列
- C++智慧指標作為成員變數C++指標變數
- c++智慧指標中的reset成員函式C++指標函式
- C++特殊成員函式及其生成機制C++函式
- 函式指標使用c++類成員函式函式指標C++
- c++類别範本成員函式報錯C++函式
- C++ 成員函式指標簡單測試C++函式指標
- C++學習筆記(三):類與物件--靜態成員變數與常成員函式C++筆記物件變數函式
- c++基礎知識(十)學習C++靜態成員注意事宜C++
- 深入C++成員函式及虛擬函式表C++函式
- C++類的靜態成員變數初始化C++變數
- 淺談C++指標直接呼叫類成員函式C++指標函式
- c++中string類成員函式的總結C++函式
- C/C++返回內部靜態成員的陷阱薦C++
- C++派生類物件訪問基類的protected成員C++物件
- [C++] 成員函式指標和函式指標C++函式指標
- C++ 中的 const 物件與 const 成員函式C++物件函式
- C# 靜態成員與例項成員C#
- C++類內成員變數可以定義引用型別嗎C++變數型別
- 關於C++物件的成員變數的佈局問題C++物件變數
- c++物件導向程式設計 常資料成員的使用C++物件程式設計