C++ 的友元函数的使用方法

这篇博客探讨了C++中的友元函数如何被用来访问类的私有数据成员。通过两个实例,展示了如何在教师类中设置私有工资,并通过校长类的友元函数修改教师工资;以及在用户账户类中设置私有密码,并由管理员类的友元函数修改用户密码。这展示了友元函数在权限控制和数据访问上的灵活性。
摘要由CSDN通过智能技术生成

 

友元函数在类里边但是并不属于类,而是一个独立的函数,他可以访问类里的私有数据成员

友元函数的声明写在类里面,定义写在类外面,友元函数的参数:对哪一个类的成员进行访问,参数就是那个类的对象

#include<iostream>
using namespace std;
class Student
{
private:
	int age;
public:
	friend void PrintAge(Student stu);//友元函数的参数是类中的一个对象
	void SetAge(int a) { age = a; }
};
void PrintAge(Student stu)
{
	cout << "age= " << stu.age << endl;
}

int main()
{
	Student me;
	me.SetAge(20);
	PrintAge(me);//参数是对象名
	return 0;
}

练习题1、声明教师类,将其工资声明为私有的,再声明校长类,校长类有一个教师类的友元函数,是这个函数可以修改教师的工资

更改谁的属性,友元函数就写在谁的类里边,然后再在校长类里面写一个跟友元函数名字一样的成员函数,

#include<iostream>
using namespace std;
class Teacher;
class HeadMaster
{
public:
	HeadMaster(){}
	void SetSalary(Teacher& teacher);
};

class Teacher
{
private:
	int m_salary;
public:
	Teacher(){}
	friend void HeadMaster::SetSalary(Teacher& teacher);
	//有参构造函初始化数据
	Teacher(int salary)
	{
		m_salary = salary;
	}
	void print()
	{
		cout << "教师当前工资:" << m_salary << endl;
	}
};
void HeadMaster::SetSalary(Teacher& teacher)
{
	teacher.m_salary = 8000;
}


int main()
{
	Teacher me{ 10000 };
	HeadMaster you;
	me.print();
	you.SetSalary(me);//通过校长修改教师工资友元函数的对象是对象
	me.print();
	return 0;
}

输出结果:

 练习题2、

声明用户账户类,将密码设为私有,再声明管理员类,有一个用户账户类友元函数,通过此函数可以修改用户密码(意思就是说如果用户忘记了密码,可以让管理员重新修改)

代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Account;
class Manager
{
public:
	//修改密码
	void setpassword(Account& account);
};
class Account
{
private:
	char m_password[20];
public:
	Account() {}// 无参构造函数
	//友元函数
	friend void Manager::setpassword(Account& account);//将友元函数与前面的成员函数关联起来即可修改成员属性
	//有参构造函数
	Account(const char* password)
	{
		strcpy(m_password, password);
	}
	void print()
	{
		cout << "当前密码:" << m_password << endl;
	}
};
void Manager::setpassword(Account& account)
{
	strcpy(account.m_password, "111111");
}
int main()
{
	Account me("123456");
	Manager you;
	me.print();
	you.setpassword(me);
	me.print();
	return 0;
}

输出:

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值