前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >友元类的实现

友元类的实现

作者头像
我与梦想有个约会
发布2023-10-20 16:35:52
1060
发布2023-10-20 16:35:52
举报
文章被收录于专栏:jiajia_dengjiajia_deng

在将一个类中的成员函数作为另一个类的友元函数的案例中我们看到,为了一个其他类的函数可以访问本类中的私有成员,将 distance 函数声明成了 friend 函数。其实我们也完全可以将整个 ManagerPoint 类声明为 Point 类的友元类。代码如下:

代码语言:javascript
复制
#include
 
using namespace std;
 
class Point;
 
class ManagerPoint
{
public:
int distance(Point& a, Point& b);
};
 
class Point
{
public:
Point(int xx, int yy)
{
_x = xx;
_y = yy;
}
 
void display()
{
cout << “(“ << _x << “,” << _y << “)” << endl;
}
 
// 将整个 ManagerPoint 类声明为 Point 的友元类
friend class ManagerPoint;
 
private:
int _x;
int _y;
};
 
int ManagerPoint::distance(Point& a, Point& b)
{
int dx = a._x - b._x;
int dy = a._y - b._y;
return sqrt(dx * dx + dy * dy);
}
 
int main(int argc, char* argv[])
{
Point p1(3, 4), p2(6, 8);
p1.display();
p2.display();
ManagerPoint mp;
int d = mp.distance(p1,p2);
cout << “Distance is : “ << d << endl;
 
getchar();
return 0;
}
这样,ManagerPoint 类中的所有成员函数都可以访问 Point 类中的私有成员了。通过几篇文章的记载,我们一共见到了三种友元的方式。一种是全局友元函数、一种是某类的成员函数做友元函数,最后一种则是将整个类作为某类的友元类。
class A
{
public:
// 全局友元函数
friend void func(A &a);
// 类成员函数做友元函数
friend void B::func(A &a);
// 完整的类做友元类
friend class B;
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档