C++之友元函数和友元类

本文介绍了C++中友元函数和友元类的概念及其应用。详细解释了友元函数如何帮助类之间共享数据并提高效率,以及在运算符重载和类间数据共享场景下的使用。同时探讨了友元函数的特点、声明方式及可能带来的封装性破坏问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、友元函数和友元类

1.1为什么要使用友元函数

    在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。

    实际上具体大概有下面两种情况需要使用友元函数:(1)运算符重载的某些场合需要使用友元。(2)两个类要共享数据的时候。

 

1.2特点

     友元函数在类中只有声明,没有实现,友元函数不是类的内部函数,是一个全局函数

   友元函数的声明 不受类的访问控制 限制,可以放在类内部的任意位置

     友元函数破坏了类的封装性

1.3声明

     friend 用来声明 友元函数:可以访问类的私有成员变量

友元类

friend也可以用来声明友元类

友元类中所有函数都是该类的友元函数

友员类通常设计为一种对数据操作或类之间传递消息的辅助类


#include <stdio.h>

class Test2_2;

class Test2_1
{
	friend void printA(Test2_1 &obj);//声明友元函数
friend Test2_2;					  //声明友元类
public:
	Test2_1 (int a)
	{
		this->a = a;
	}
	void print()
	{
		printf ("a = %d\n", a);
	}
private:
	int a;
};

class Test2_2
{
public:
	void print(Test2_1 &obj)
	{
		printf ("a = %d\n", obj.a);
	}
private:
	int a;
};

void printA(Test2_1 &obj)
{
	// 私有成员不能访问
	printf ("a = %d\n", obj.a);
}

int main2_1()
{
	Test2_1 a(10);
	a.print();

	printA(a);


	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值