c++中的友元函数是什么?

c++中的友元函数是什么?,第1张

友元函数要在一个类体内说明,形式为:

friend 类型名 友元函数名(形参表);

然后在类体外对友元函数进行定义,定义的格式和普通函数相同,但可以通过对象作为参数直接访问对象的私有成员

友元函数说明如下:

1)必须在类的说明中说明友元函数,说明时以关键字friend开头,后跟友元函数的函数原型,友元函数的说明可以出现在类的任何地方,包括在private和public部分;

2)注意友元函数不是类的成员函数,所以友元函数的实现和普通函数一样,在实现时不用"::"指示属于哪个类,只有成员函数才使用"::"作用域符号;

3)友元函数不能直接访问类的成员,只能访问对象成员,

4)友元函数可以访问对象的私有成员,但普通函数不行;

5)调用友元函数时,在实际参数中需要指出要访问的对象,

成员函数是可以设定为其他类的友元的,代码改成这样就行了;

class

a;

class

b

{

public:

void

show(a

&

t);

};

class

a

{

int

i;

public:

friend

void

b::show(a

&

t);

};

void

b::show(a

&t)

{

cout

<<

ti

<<

endl;

}

worker(){}默认构造函数,其作用是把类的私有成员变量初始化为string类的默认值。

也就是空字符串。

~worker(){}是析构函数,其作用是在超出对象的作用域后,将对象所占的内存给释放掉。

避免物理内存被用尽

友元除了前面讲过的函数以外,友元还可以是类,即一个类可以作另一个类的友元。当一个类作为另一个类的友元时,这就意味着这个类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。

定义友元类的语句格式如下:

friend class 类名(即友元类的类名); (1) 友元关系不能被继承。

(2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。

(3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明。 即一个函数作为一个类的函数,同时又是另一个类的友元。

如果我们决定该函数必须作为一个类的成员函数,同时又是另一个类的友元,则成员函数声明和友元声明如下: class Window;class Screen{public://copy是类Screen的成员Screen& copy(Window&);//};class Window{//copy是类Window的一个友元friend Screen& Screen::copy(Window&);//};只有当一个类的定义已经被定义时,它的成员函数才能被声明为另一个类的友元。例如Screen 类必须把Window 类的成员函数声明为友元,而Window类必须把Screen 类的成员函数声明为友元。在这种情况下可以把整个Window类声明为Screen 类的友元。 class Window;class Screen{friend class Window;//};Screen 类的非公有成员现在可以被Window 的每个成员函数访问。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11670713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存