C++友元函数概述

  • Post author:
  • Post category:其他

友元函数

 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。

  1. 友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明
  2. 友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数。
  3. 一个函数可以是多个类的友元函数,只需要在各个类中分别声明。
  4. 友元函数的调用与一般函数的调用方式和原理一致。
#include <iostream>
using namespace std;

class temp
{
	double value;
public:
	friend void print(temp t) ;
	void showvalue() const;
	void setvalue(const double& val);
};

// 成员函数定义
void temp::setvalue(const double& val)
{
	this->value = val;
}
// 成员函数定义
void temp::showvalue() const
{
	cout << "成员函数得到:" << this->value << endl;
}

// 请注意:print不是任何类的成员函数
void print(temp t)
{
	/* 因为 print 是 temp 的友元,它可以直接访问该类的任何成员 */
	cout << "友元函数得到 : " << t.value << endl;
}

int main() {
	temp t;
	t.setvalue(10);
	t.showvalue();
	print(t);
	system("pause");
}

运算符声明成类成员还是声明独立友元函数建议准则:

  1.  C++规定,赋值运算符=、数组下标运算符口、函数调用运算符()、成员访问运算符->在重载时必须声明为类的成员函数
  2.  流运算符<<、>>、类型转换运算符不能定义为类的成员函数,只能是友元函数
  3.  一元运算符和复合赋值运算符重载时,一般声明类的成员函数
  4.  二元运算符在运算符重载时,一般声明为友元函数

版权声明:本文为MARSHCW原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。