1. 程式人生 > >c++友元函式說明

c++友元函式說明

1)C++中引入友元函式,是為在該類中提供一個對外(除了他自己以外)訪問的視窗;

2)這個友元函式他不屬於該類的成員函式,他是定義在類外的普通函式

  只是在類中宣告該函式可以直接訪問類中的private或者protected成員。

使用友元函式注意的要點:

  1. 類中通過使用關鍵字friend 來修飾友元函式,但該函式並不是類的成員函式,其宣告可以放在類的私有部分,也可放在共有部分。友元函式的定義在類體外實現,不需要加類限定。
  2. 一個類中的成員函式可以是另外一個類的友元函式,而且一個函式可以是多個類友元函式。
  3. 友元函式可以訪問類中的私有成員和其他資料,但是訪問不可直接使用資料成員,需要通過對物件進行引用。
  4. 友元函式在呼叫上同一般函式一樣,不必通過對物件進行引用。

例如如下形式:這裡解釋上面的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