友元函数可以访问类的私有变量,还可以访问私有函数
1 类本身的友元函数
虽然在类中说明友元函数,但它并不是类的成员函数,所以可以在类外面像普通函数那样定义这个函数。
在类中说明友元函数带friend,在类外面定义这个函数不带friend
2 将成员函数用做友元
3 将一个类说明为另一个类的友元
若F类是A类的友元类,则F类的所有成员函数都是A类的友元函数。
友元类通常设计为一种对数据操作或类之间传递消息的辅助类。
//由于类fushu的构造函数的参数涉及类mianji,因此应该先定义类mianji,后定义类fushu
1 #include <iostream> 2 3 class mianji 4 { 5 public: 6 friend class fushu;//将一个类说明为另一个类的友元 7 mianji()//构造函数 8 { 9 this->cx = 0; 10 this->cy = 0; 11 } 12 void setxy(int a, int b) 13 { 14 this->cx = a; 15 this->cy = b; 16 } 17 private: 18 int cx; 19 int cy; 20 }; 21 22 //由于类fushu的构造函数的参数涉及类mianji,因此应该先定义类mianji,后定义类fushu 23 24 class fushu 25 { 26 public: 27 fushu(mianji mianji1)//构造函数 28 { 29 this->x = mianji1.cx; 30 this->y = mianji1.cy; 31 } 32 void print() 33 { 34 std::cout << x << "+" << y << "i" << std::endl; 35 } 36 private: 37 int x; 38 int y; 39 }; 40 41 void main() 42 { 43 mianji mianji1; 44 45 fushu fushu1(mianji1);//定义一个类fushu的对象,参数是一个类mianji的对象 46 fushu1.print(); 47 48 fushu fushu2 = static_cast<fushu>(mianji1);//通过构造函数进行转换 49 50 system("pause"); 51 }