C++每日一题(4)之番外篇(友元函数、构造函数、析构函数)

本文详细介绍了C++中友元函数的概念、作用及其使用方法。通过实例代码展示了如何利用友元函数访问类的私有成员,解释了友元函数在实际编程中的应用场景。

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

友元函数是这样定义的:友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。


为什么要使用友元函数:学习C++的都知道类里面的私有成员和私有函数是不可以用普通函数来访问的,只有通过成员函数来访问,这是由于C++的封装性所决定的。那为了可以访问私有成员和私有函数,友元函数就应用而生了,所以使用友元函数就是为了用普通函数来调用类内的私有成员或者私有函数。


怎样使用友元函数:友元函数从语法上来看和普通函数并无差别,只是在前面加一个friend。

#include<iostream>
#include"string"
using namespace std;
extern int num=0;
//全局变量
class Student
{
public:
	Student(string a,int n,char b)
	//a[]名字  n年龄  b性别(x,y)
	{
		name=a;
		age=n;
		sex=b;
		num++;
		cout<<num<<endl;
		cout<<"执行三参数构造函数:"<<endl;
	}
	Student()
	{
		num++;
		cout<<num<<endl;
		cout<<"执行默认构造函数"<<endl;
	}
	~Student()
	{
		num--;
		cout<<num<<endl;
		cout<<"执行析构函数"<<endl;
	}
	//static int num;
	void get_name();
	void get_age();
	void get_sex();
	void input();
	void output();
	friend bool equal(Student date1,Student date2);
	//声明友元函数  对象date1和date2年龄相同返回true,年龄不同返回false
private:
	string name;
	int age;
	char sex;

};
int main()
{
	Student student1("student11",19,'x'),student2;
	student1.output();
	student2.input();
	student2.output();
	if(equal(student1,student2))
		//注意这里调用equal函数的形式,与调用类的成员函数有明显区别。
		cout<<"他们年龄相同!"<<endl;
	else
		cout<<"他们年龄不相同!"<<endl;

	return 0;
}
void Student::output()
{
	cout<<"输出名字:"<<name<<endl;
	cout<<"输出年龄:"<<age<<endl;
	cout<<"输出性别:"<<sex<<endl;
}
void Student::input()
{
	cout<<"输入名字:";
	cin>>name;
	cout<<"输入年龄:";
	cin>>age;
	cout<<"输入性别:";
	cin>>sex;
}
bool equal(Student date1,Student date2)
	//这里是没有类限定的,和正常的普通函数是完全一样的
{
	return (date1.age==date2.age);
	//注意可以根据名称来访问私有成员变量age
}

这里后面又又析构了两次。具体为啥我还不是很明白!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值