友元会将类的内部暴露给其他类或函数,破坏类的抽象性原则,只在有限情况下使用
一定要定义好函数 和类的位置
友元函数使用实例:
#include <iostream> #include <string> using namespace std; //提前声明类 class student; class grade { private : int _grade; public : grade(int grade):_grade(grade){} void display(student &); }; //可以当做一个普通类 class student { public: int _num; string _name; //构造函数和普通函数除了返回值得区别 student(int num,string name):_num(num),_name(name){} //要调用另外一个类中函数 可以申明为友元函数 不过将类对象传递过去 friend void grade::display(student &); }; //友元函数的定义 void grade::display(student &two) { cout<<"student name num grade: "<<two._name<<" "<<two._num<<" "<<this->_grade<<endl; }; int main(){ student stu(100,"buyingfei"); grade gra(100); gra.display(stu); return 0; }
运行结果:
友元类使用:
#include <iostream> #include <string> using namespace std; //可以当做一个普通类 class student { private: int _num; string _name; public: friend class grade; //声明为友元类 则在本类中可以调用声明友元类中成员 //构造函数和普通函数除了返回值得区别 student(int num,string name):_num(num),_name(name){} //传递参数是另外类的引用 声明函数加 ; 不要{} void display(grade &); }; class grade { private : int _grade; public : grade(int grade):_grade(grade){}; int get(){ return this->_grade; } }; //友元函数的定义 void student::display(grade &two) { cout<<"student name num grade: "<<this->_name<<" "<<this->_num<< " "<<two.get()<<endl; }; int main(){ student stu(100,"buyingfei"); grade gra(100); stu.display(gra); return 0; }
运行结果: