c++友元函式說明
1)C++中引入友元函式,是為在該類中提供一個對外(除了他自己以外)訪問的視窗;
2)這個友元函式他不屬於該類的成員函式,他是定義在類外的普通函式
只是在類中宣告該函式可以直接訪問類中的private或者protected成員。
使用友元函式注意的要點:
- 類中通過使用關鍵字friend 來修飾友元函式,但該函式並不是類的成員函式,其宣告可以放在類的私有部分,也可放在共有部分。友元函式的定義在類體外實現,不需要加類限定。
- 一個類中的成員函式可以是另外一個類的友元函式,而且一個函式可以是多個類友元函式。
- 友元函式可以訪問類中的私有成員和其他資料,但是訪問不可直接使用資料成員,需要通過對物件進行引用。
- 友元函式在呼叫上同一般函式一樣,不必通過對物件進行引用。
例如如下形式:這裡解釋上面的1,3,4要點的使用,加以理解。
#include <iostream>
#include <cstring>
using namespace std;
class persion{
public:
persion(char *pn);
//友元函式;
friend void setweigth(persion &p,int h);//注意,引數列表中一般會有一個引用型別的形參,原因參考上面的使用要點3和4;
void disp(); //類成員函式
private:
char name[20 ];
int weigth,age;
};
persion::persion(char *pn) //建構函式
{
strcpy(name,pn);
weigth=0;
}
void persion::disp()
{
cout<<name<<"--"<<weigth<<endl;
}
//友元函式的具體實現:這裡沒有類限定例如 (perion::setweigth)這種形式,這裡可以與上面的disp()做個對比,一個屬於類的成員,有限定,不屬於類的成員函式,沒有加限定。
void setweigth(persion &pn,int w)
{
strcpy(pn.name,pn);//實現字串複製
pn.weigth=w; //私有成員資料賦值
}
void main()
{
persion p("zhansan");
//呼叫實現setweigth(),與一般函式呼叫一致。
setweigth(p,60);
p.disp(); //呼叫類的成員函式。
}
關於要點2的使用,我給出一段程式碼案例:
#include <iostream>
#include <cstring>
using namespace std;
class wheel;
class car{
public:
car(char *pn);
void run(wheel &w); //成員函式,做成wheel類中友元函式實現
private:
char name[20];
};
car::car(char *pn)
{
strcpy(name,pn);
}
class wheel{
public:
wheel(int s);
friend void car::run(wheel &w); //這裡把car類的成員函式做了友元函式。
private:
int speed;
};
wheel::wheel(int s)
{
speed=s;
}
int main(int argc, char const *argv[])
{
wheel w(60);
car c("New car");
c.run(w);
return 0;
}
void car::run(wheel &w) //car類成員函式的實現
{
cout<<"the car is running"<<endl;
cout<<"name: "<<name<<" speed :"<<w.speed<<endl;
}
相關推薦
C# 友元函式
2. 簡述:不用繼承的方式為一個類增加成員方法。 3. 實現程式碼: /// <summary> /// Component擴充套件類 /// </summary> internal static class ComponentDesignMod
C++友元函式和友元類用法詳解
在C++中,我們使用類對資料進行了隱藏和封裝,類的資料成員一般都定義為私有成員,成員函式一般都定義為公有的,以此提供類與外界的通訊介面。但是,有時需要定義一些函式,這些函式不是類的一部分,但又需要頻繁地訪問類的資料成員,這時可以將這些函式定義為該函式的友元函式。除了友元函式
c++友元函式宣告及其呼叫
1.友元函式的簡單介紹 1.1為什麼要使用友元函式 在實現類之間資料共享時,減少系統開銷,提高效率。如果類A中的函式要訪問類B中的成員(例如:智慧指標類的實現),那麼類A中該函式要是類B的友元函式。具體來說:為了 使其他類的成員函式直接訪問該類的私有變數。即:允許外
c++友元函式說明
1)C++中引入友元函式,是為在該類中提供一個對外(除了他自己以外)訪問的視窗;2)這個友元函式他不屬於該類的成員函式,他是定義在類外的普通函式 只是在類中宣告該函式可以直接訪問類中的private或者protected成員。使用友元函式注意的要點:類中通過使用關鍵字fri
試圖對C++友元函式,靜態成員函式做個小結
2014年12月13日 22:28:43第一篇部落格 以下僅僅是個人觀點,請大家指正. 友元函式分類:(按照我的想法,結合C++ Plus) 一. 1. 讓其他類(B類)的成員數最為類A的友元函式(只需要在類A中宣告即可) 2.讓類B成為類A的友元
對c++友元函式和友元類的理解
1,友元函式的定義和作用 我們已知道類具有封裝和資訊隱藏的特性。只有類的成員函式才能訪問類的私有成員,程式中的其他函式是無法訪問私有成員的。非成員函式可以訪問類中的公有成員,但是如果將資料成員都定義為公有的,這又破壞了隱藏的特性。另外,應該看到在某些情況下,特別是在對某
C++ 友元函式/實際使用的一些注意事項/重複定義
友元函式可以分成1.外部函式 2.其他類函式成員作為友元函式 其他的諸如友元函式導致資訊不安全的老梗就不多說了,簡單說說今天遇到的問題 重複定義問題,出現在 其他類成員作為友元函式的時候 (1). 在A類的宣告中寫下函式 (2). 在A類外給出具體定義
C++友元函式訪問類的私有成員
#include <iostream>#include<cstring>using namespace std ;class Student{private:string name;int age;int sore;public:Student(string name,int age
C++ 友元函式的使用&過載“輸入輸出”運算子
友元函式 形式 friend 型別名 友元函式名(形參表); 然後在類體外對友元函式進行定義,定義的格式和普通函式相同,但可以通過物件作為引數直接訪問物件的私有成員 說明如下 1)必須在類的說明中說明友元函式,說明時以關鍵字friend開頭,後跟友元函式的函
c++ 友元函式,模板函式
友元函式. 類的友元函式是定義在類外部,但有權訪問類的所有私有(private)成員和保護(protected)成員。儘管友元函式的原型有在類的定義中出現過,但是友元函式並不是成員函式。 友元可以是一個函式,該函式被稱為友元函式;友元也可以是一個類,該類被稱
C++ 友元函式
#include <iostream> using namespace std; class girl { private: char *name; int age; friend class boy; //宣告類boy是類girl的友元 public:
c++友元函式簡析
在實現類之間資料共享時,減少系統開銷,提高效率。如果類A中的函式要訪問類B中的成員(例如:智慧指標類的實現),那麼類A中該函式要是類B的友元函式。具體來說:為了 使其他類的成員函式直接訪問該類的私有變數。即:允許外面的類或函式去訪問類的私有變數和保護變數,從而使兩個類共享同一函式。 3.友元函式和普通
C++友元函式和友元類(C++ friend)詳解
私有成員只能在類的成員函式內部訪問,如果想在別處訪問物件的私有成員,只能通過類提供的介面(成員函式)間接地進行。這固然能夠帶來資料
C++過載(2):通過成員函式和友元函式過載
分別通過成員函式和友元函式完成過載 #include <iostream> using namespace std; class Complex { public: Complex(double real =0,double imag=0):real(real),imag(i
4、【C++】靜態成員變數/靜態成員函式/行內函數/友元函式/友元類/友元成員函式
一、靜態成員 我們可以使用 static 關鍵字來把類成員定義為靜態的。當我們宣告類的成員為靜態時,這意味著無論建立多少個類的物件,靜態成員都只有一個副本。 靜態成員在類的所有物件中是共享的。如果不存在其他的初始化語句,在建立第一個物件時,所有的靜態資料都會被初始化為
C++的友元函式
類的友元函式申明在類內部,定義在外部。(怎麼記得好像有一個東西也是這麼玩的,好吧,原來是靜態變數和靜態函式,不過不同的是,靜態的東西,它們還是屬於這個類的,而且定義靜態成員的時候是要加作用範圍),它實際上是可以理解為是插入類內部的一個間諜,可以獲取類內部的protected和private的資訊,e
c++之友元函式和友元類
c++友元函式一些見解 1、為什麼要引入友元函式:在實現類之間資料共享時,減少系統開銷,提高效率 具體來說:為了使其他類的成員函式直接訪問該類的私有變數 即:允許外面的類或函式去訪問類的私有變數和保護變數,從而使兩個類共享同一函式 優點:能夠提高效率,表達簡單、清晰
YTUOJ——C++ 習題 輸出日期時間--友元函式
題目描述 設計一個日期類和時間類,編寫display函式用於顯示日期和時間。要求:display函式作為類外的普通函式,分別在Time和Date類中將display宣告為友元函式。在主函式中呼叫display函式,display函式分別引用Time和Date兩個類的物件的私有資料,輸出年、月
c++ 單例模式 友元函式
一.設計模式 單例模式(類只能生成一個物件) 遮蔽建構函式,拷貝建構函式(放在private中 類外無法訪問),此時類外就無法看到這兩個函數了 也就無法生成物件了 類就沒有意義了 類中給出一個介面(getInstance) 生成唯一物件 返回值為類型別的指標或引用(不生
學生類,含學生姓名與成績,用友元函式訪問私有成員,對兩個物件的成績進行比較。(2018.9.19 c++作業)
定義兩個物件,與一個友元函式(使用c++中引用傳遞的方式,實現引數的傳遞) #include using namespace std; class student { private: char name[20]; float grade; public: s