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;
}
相关文章
相关标签/搜索