C++友元函数 普通函数声明为友元函数

Posted LC编程开发者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++友元函数 普通函数声明为友元函数相关的知识,希望对你有一定的参考价值。

友元函数

       如果在本类以外的其他地方定义了一个函数(这个函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数),在对本类进行声明时,在类体中用friend对该函数进行声明,此函数就称为本类的“友元函数”。一个类的友元函数可以访问这个类中的私有成员。

       例如,定义一个func()函数,在C++的TestA类中声明func()函数是当前类的“友元”函数,那么,这个func()函数就可以访问TestA类的私有成员。

2.1 普通函数声明为友元函数

       我们可以定义一个普通的函数,希望这个函数能够访问一个类中的成员变量,那么,我们就在定义类的时候,声明这个函数是该类的友元函数,相当是说:在定义类的时候,把该普通函数声明为自己的一个朋友,允许这个朋友访问自己的成员变量。

       这样,一个函数可以被多个类声明为“朋友”,它可以访问多个类中的成员变量。

通过下面的例子,可以理解友元函数的性质和作用。如下是一个友元函数的测试例子:

 

       程序运行结果如下:

 

       可以看到,在print()函数中可以引用stud对象的private私有成员。是因为,print()函数在student类中声明为友元。

       请注意print()是一个在类外定义的函数,它不是属于student类的一个函数,所以,在定义的时候,并没有使用类前缀。它是非成员函数,不属于任何类。但是,我们把它声明为student类的一个“朋友”,让它可以访问student类的私有成员变量。

       所以,使用 friend 关键字,在student类中声明定义在别处的print() 函数为student类的一个友元,这样,print() 是student类的朋友,就可以访问它的私有成员变量。

       注意:在print() 中访问私有成员变量的时候,必须加上“对象名”,不能够如下:

void print(student& s)//定义友元函数

    cout << "name = " << name << endl;

    cout << "addr = " << addr << endl;

    cout << "number = " << number << endl;

       因为,print() 不是student类中的一个成员函数,它只是student类的一个朋友。不能够默认引用student类的成员变量,必须指定要访问的对象。

以上是关于C++友元函数 普通函数声明为友元函数的主要内容,如果未能解决你的问题,请参考以下文章

C++友元函数 普通函数声明为友元函数

C++友元

5.友元运算符重载

C++友元详解

C++入门友元函数详解(定义实现优缺点)

友元函数都有哪些特点?