友元函数是这样定义的:友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。
为什么要使用友元函数:学习C++的都知道类里面的私有成员和私有函数是不可以用普通函数来访问的,只有通过成员函数来访问,这是由于C++的封装性所决定的。那为了可以访问私有成员和私有函数,友元函数就应用而生了,所以使用友元函数就是为了用普通函数来调用类内的私有成员或者私有函数。
为什么要使用友元函数:学习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
}
这里后面又又析构了两次。具体为啥我还不是很明白!