标签:用友 end get 程序员 对象 private 返回值 int getch
在类中有公用的成员,也有私有的成员,在类的外部,我们只能访问公用的成员,在类的成员函数里面才可以访问类的所有成员。
1.在C++中可以使用friend关键字来将函数、类声明为某个类的友元。
2.当我们将一个函数或者一个类声明为另一个类的友元的时候,就可以在这个函数或类内部对这个类的私有成员进行访问。
3.友元包括友元函数和友元类。我们可以将某一个函数声明为某一个类的友元函数,将某一个类声明为某一个类的友元类。
4.友元只能授予,不能索取,单向,不能传递。如果A是B的友元,B是C的友元,那么A不是C的友元。
定义:在定义一个类的时候,可以把一些函数(包括全局函数和其他类的成员函数)声明为“友元”,这样那些函数就成为该类的友元函数。类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。访问对象中的成员必须通过对象名。
作用:增加灵活性,使程序员可以在封装和快速性方面做合理选择。
将全局函数声明为友元的写法如下:
friend 返回值类型 函数名(参数表);
将其他类的成员函数声明为友元的写法如下:
friend 返回值类型 其他类的类名::成员函数名(参数表);
但是,不能把其他类的私有成员函数声明为友元。
声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend,如下所示:
class Box { double width; public: double length; friend void printWidth( Box box );
void setWidth( double wid ); };
完整代码如下:
#include <iostream> using namespace std; class Box { double width; public: friend void printWidth( Box box ); void setWidth( double wid ); }; // 成员函数定义 void Box::setWidth( double wid ) { width = wid; } // 请注意:printWidth() 不是任何类的成员函数 void printWidth( Box box ) { /* 因为 printWidth() 是 Box 的友元,它可以直接访问该类的任何成员 */ cout << "Width of box : " << box.width <<endl; } // 程序的主函数 int main( ) { Box box; // 使用成员函数设置宽度 box.setWidth(10.0); // 使用友元函数输出宽度 printWidth( box ); return 0; }
代码运行结果:
一个类 A 可以将另一个类 B 声明为自己的友元,类 B 的所有成员函数就都可以访问类 A 对象的私有成员。在类定义中声明友元类的写法如下:
friend class 类名;
代码示例:
#include <iostream> using namespace std; class Box { double width; public: friend void printWidth(Box box); friend class BigBox; void setWidth(double wid); }; class BigBox { public : void Print(int width, Box &box) { // BigBox是Box的友元类,它可以直接访问Box类的任何成员 box.setWidth(width); cout << "Width of box : " << box.width << endl; } }; // 成员函数定义 void Box::setWidth(double wid) { width = wid; } // 请注意:printWidth() 不是任何类的成员函数 void printWidth(Box box) { /* 因为 printWidth() 是 Box 的友元,它可以直接访问该类的任何成员 */ cout << "Width of box : " << box.width << endl; } // 程序的主函数 int main() { Box box; BigBox big; // 使用成员函数设置宽度 box.setWidth(10.0); // 使用友元函数输出宽度 printWidth(box); // 使用友元类中的方法设置宽度 big.Print(20, box); getchar(); return 0; }
代码运行结果如下:
1.必须在类的说明中说明友元函数,说明时以关键字friend开头,后跟友元函数的函数原型,友元函数的说明可以出现在类的任何地方,包括在private和public部分
2.友元函数不能直接访问类成员只能访问对象成员,访问对象中的成员必须通过对象名。
3.友元为单向
4.友元关系不能被继承,不能传递
标签:用友 end get 程序员 对象 private 返回值 int getch
原文地址:https://www.cnblogs.com/Zzzzxy/p/11609377.html