友元的定义
定义 |
自己概述 |
类外的函数,想要调用类中的元素+对象,所以和类建立了友元的关系 |
文本概述 |
友元函数:一般的成员函数+类中的成员函数 作用:类中的保护和私有成员à其它类/其它函数调用 |
|
定义形式 |
friend 返回值类型 友元函数名(){}; |
友元函数的使用方式有两种:一般的成员函数+类中的成员函数,下面是对应的举例
【一般的成员函数作为友元函数】
/*
* 题目名称:友元函数的应用
* 输出:The distance is:
/5
* 题型概论:友元
我的理解:类外的函数,想要调用类中的元素+对象,所以和类建立了友元的关系
文本解释:让类中的保护和私有成员被其它类或者其它函数调用
友元函数:一般的成员函数或者类中的成员函数(此处是类中的成员函数)
定义形式:friend 返回值类型 友元函数名(){};
* 评论:这个是友元函数的一中:一般的成员函数
调用类中的对象作为形参时要用【(类名 &对象名)】的形式
* 难度系数:7
*/
#include <iostream>
#include <string>
using namespace std;
class point
{
double x,y;
public:
point(double a=0,double b=0) //构造函数
{
x=a;
y=b;
}
point(point &p); //拷贝构造函数
double getx()
{
return x;
}
double gety()
{
return y;
}
friend double dist(point &p1,point &p2); //友元函数的声明
};
double dist(point &p1,point &p2) //友元函数的定义
{
return (sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)));
}
void main()
{
point ob1(1,1);
point ob2(4,5);
cout<<"The distance is:"<<dist(ob1,ob2)<<endl;
system("pause");
}
【类中的成员函数作为友元函数】
/*
* 题目名称:友元函数的应用
* 输出:girl\'s name:+Stacy+ age:+15
boy\'s name:+Jim+ age:+16
* 题型概论:友元
我的理解:类外的函数,想要调用类中的元素+对象,所以和类建立了友元的关系
文本解释:让类中的保护和私有成员被其它类或者其它函数调用
友元函数:一般的成员函数或者类中的成员函数(此处是类中的成员函数)
定义形式:friend 返回值类型 友元函数名(){};
友元函数中的形参可以和其它的形参一样(可以调用类中的对象)
在一个类中使用另外一个类,该类不一定在此之前已定义,但是一定要提前声明
* 评论:这个是友元函数的一中:其它类中的友元函数
* 难度系数:8
*/
#include <iostream>
#include <string>
using namespace std;
class boy; //因为友元函数prt()带了girl和boy两个类的对象,而boy
//要在后面才声明,所以提前声明它,以便使用该类的对象
class girl
{
char *name;
int age;
public:
girl(char *n,int a)
{
name=new char[strlen(n)+1];
strcpy(name,n);
age=a;
}
void prt(boy &); //
~girl()
{
delete name;
}
};
class boy
{
char *name;
int age;
public:
boy(char *n,int a)
{
name=new char[strlen(n)+1];
strcpy(name,n);
age=a;
}
friend void girl::prt(boy &); //友元函数的声明
~boy()
{
delete name;
}
};
void girl::prt (boy &b) //友元函数的定义
{
cout<<"girl\'s name:"<<name<<" age:"<<age<<"\n";
cout<<"boy\'s name:"<<b.name<<" age:"<<b.age<<"\n";
}
void main()
{
girl g("Stacy",15);
boy b1("Jim",16);
g.prt(b1);
system("pause");
}