C++基礎之友元

1、友元函數ios

  • 友元實際上並非面向對象的特徵,而是爲了兼顧C語言程序設計的習慣與C++友元的概念破壞了類的封裝性和信息隱藏,但有助於數據共享,可以提升程序執行的效率。信息隱藏的特色,而特地增長的功能。這是一種類成員的訪問權限。
  • 友元使用關鍵字friend標識。在類定義中,當friend出如今函數說明語句的前面時,表示該函數爲類的友元函數。一個函數能夠同時說明爲多個類的友元函數,一個類中也能夠有多個友元函數。當friend出如今類名以前時,表示該類爲類的友元類。
  • 友元函數能夠訪問當前類中的全部成員,包括 public、protected、private 屬性的。
  • 友元函數不是類的成員函數,但容許訪問類中的全部成員。在函數體中訪問對象成員時,必須使用「對象名.對象成員名」的方式。
#include<iostream>
using namespace std;
class Student{
    private:
        int id;
        string name;
    public:
         Student(int id,string name);  
         //聲明友元函數
         friend void show(Student &stu);     
};
//友元函數的實現(直接能夠訪問類的私有屬性)
void show(Student &stu){
    cout<< stu.id << " name:" <<stu.name <<endl;
};
Student::Student(int id,string name):id(id),name(name){

}
int main(){
    Student stu(1,"張三");
    show(stu);
    return 0;
}

2、友元類

  • 若是將一個類B說明爲另外一個類A的友元類,則類B中的全部函數都是類A的友元函數,在類B的全部成員函數中均可以訪問類A中的全部成員。在類定義中
  • 聲明友元類的格式以下:friend class 類名;
  • 友元類的關係是單向的。若說明類B是類A的友元類,不等於類A也是類B的友元類。友元類的關係不能傳遞,即若類B是類A的友元類,而類C是類B的友元類,不等於類C是類A的友元類。除非確有必要,通常不把整個類說明爲友元類,而僅把類中的某些成員函數說明爲友元函數。
#include<iostream>
using namespace std;
class Teacher;
class Student{
    private:
        int id;
        string name;
    public:
         Student(int id,string name);
         void show(Teacher *tea);   
};
Student::Student(int id,string name):id(id),name(name){

}
class Teacher{
    private:
        int id;
        string name;
    public:
        Teacher(int id,string name);  
        //將Student類聲明爲Teacher類的友元類
        friend class Student;
};
Teacher::Teacher(int id,string name):id(id),name(name){

}
void Student::show(Teacher *tea){
    cout << this->id << this->name << tea->name << endl;
}

int main(){
    Teacher tea(1,"老外");
    Student stu(1,"張三");
    stu.show(&tea);
    return 0;
}
相關文章
相關標籤/搜索