天天看點

友元函數與友元類

友元函數:

需要友元的原因:

1:普通函數需要直接通路一個類的保護或私有資料成員

2:需要友元的另一個原因是為了友善重載操作符的使用

友元函數不是成員函數,它是類的朋友,因而能夠通路類的全部成員

在類的内部,隻能聲明它的函數原型,加上friend 關鍵字

優缺點:

優點:能夠提高效率,表達簡單,清晰

缺點:友元函數破壞了封裝機制,盡量不使用成員函數,除非不得已的情況下才使用友元函數。

友元函數和普通成員函數差別:

成員函數有this指針,而友元函數沒有this指針

友元函數是不能被繼承的,就像父親的朋友未必是兒子的朋友。

類為友元:

#include<iostream>
using namespace std;
class Student
{
    int student_id;
public:
    Student(int x):student_id(x){}
    friend class Teacher;            <span style="color:#ff0000;">//為Teacher友元,所有Teacher可以通路所有student裡面東西</span>
};
class Teacher
{
    int teacher_id;
public:
    Teacher(int x):teacher_id(x){};
    void show_student(const Student& a )    <span style="color:#cc0000;">//在此進行對student的通路</span>
    {
	cout<<"student_id:"<<a.student_id<<endl;
    }
};

int main()
{
    Student s1(201501);
    Teacher t1(1);
    t1.show_student(s1);          //列印
    return 0;


}
           

普通函數為友元:

#include<iostream>
using namespace std;
class Student
{
    int student_id;
public:
    Student(int x):student_id(x){}
    friend void fn(const Student& a);   <span style="color:#ff0000;">//申明友元函數</span>
};
void fn(const Student& a)
{
    cout<<a.student_id<<endl;          <span style="color:#ff0000;"> //對其進行使用</span>
    return ;
}
int main()
{
    Student s1(201501);
    fn(s1);
    return 0;


}
           

繼續閱讀