本文介绍: 友元函数可以直接访问类的private成员protect成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明声明需要加。写在类中进行一个声明即可友元提供了一种突破封装方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。友元类所有成员函数可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。为了解决类外函数无法访问类中私有成员变量我们只需使用友元函数友元可以是一个函数,该函数称为友元函数使用:在函数声明前+

一、友元

友元分为友元函数元类

友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。

二、友元函数

友元可以是一个函数,该函数被称为友元函数;

友元函数可以直接访问类的private成员和protect成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明声明需要friend关键字

使用:在函数声明前+friend

class Box
{
   double width;
public:
   double length;
   friend void printWidth( Box box );
   void setWidth( double wid );
};

比如下题

#include<iostream>
using namespace std;

class Date
{
public:
	Date(int year = 0, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	//友元函数声明
	friend bool operator==(const Date& x1,const Date& x2);
private:
	int _year;
	int _month;
	int _day;
};

bool operator==(const Date& x1,const Date& x2)
	{
		return x1._year == x2._year
			&& x1._month == x2._month
			&& x1._day == x2._day;
	}
int main()
{
	//创建两个对象,并赋初始值
	Date d1(1919, 9,9);
	Date d2(1919,9,9);
	if (d1 == d2) {
		cout << "true" << endl;
	}
	else {
		cout << "false" << endl;
	}
	return 0;
}

为了解决类外函数无法访问类中私有成员变量,我们只需使用友元函数。
friend bool operator==(const Date&amp; x1,const Date&amp; x2);写在类中进行一个声明即可

三、友元类

元类所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。

class Time
{
friend class Date; {}// 声明日期类为时间类的友元类,则在日期类中就直接访问Time类
中的私有成员变量
}

原文地址:https://blog.csdn.net/luhaoran814/article/details/134712767

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_49208.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注