友元出现的目的是为了访问和更新 友元类的private 和 protect 信息:
第一类: 类外的普通函数为友元类函数:
1 #include<iostream>
2 #include<string>
3 #include<stdio.h>
4 using namespace std;
5 class boy{
6 public:
7 boy(string name,int age):name(name),age(age){}
8 ~boy(){}
9 //friend void get(boy& b);//要有参数
10 private:
11 string name;
12 int age;
13 friend void get(boy& b);//千万不要有了中文输入,有了就蛋疼了
14 //既可以在 public处声明,也可以在private处声明,还可以在protect处声明
15 };
16 void get(boy& b)//类外的普通函数作为友元函数
17 {
18 cout<<b.name<<endl<<b.age<<endl;//直接访问类的私有成员
19 }
20 int main()
21 {
22 boy a("guo",22);
23 get(a);
24 system("pause");
25 return 0;
26 }
第二类:类外其他类的成员函数为友元函数
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
class boy;
class girl
{
public:
girl(string name,int age):name(name),age(age){}
~girl(){}
void get(boy& b);//这里要加void啊
private:
string name;
int age;
};
class boy
{
public:
boy(string name,int age):name(name),age(age){}
~boy(){}
friend void girl::get(boy& b);//类外其他类的成员函数为友元函数
private:
string name;
int age;
};
void girl::get(boy& b)
{
b.age++;
cout<<b.age<<endl;
cout<<b.name<<endl;//要这样使用必须加头文件 string
}
int main()
{
boy a("guo",22);
girl b("wu",22);
b.get(a);
system("pause");
return 0;
}
第三类:其他类直接为友元类:
#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
class girl;//先声明girl类
class boy
{
public:
boy(string name,int age):name(name),age(age){}
~boy(){}
void get(girl& b);
private:
string name;
int age;
};
class girl
{
public:
girl(string name,int age):name(name),age(age){}
~girl(){}
private:
string name;
int age;
friend class boy;//其他类直接为友元类 boy类为girl的友元类,所以可以直接访问girl的name age
};
void boy::get(girl & b)
{
cout<<b.name<<endl<<b.age<<endl;
}
int main()
{
boy a("guo",22);
girl b("wu",22);
a.get(b);
system("pause");
return 0;
}