ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

友元函数知识点小结

2019-09-29 09:55:14  阅读:259  来源: 互联网

标签:友元 知识点 函数 Point int 成员 小结 友元类


友元函数与友元类的定义

类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。

友元函数即是普通函数,但它可以访问某个类中的私有成员。

而友元类,就是一个类,但它的成员函数可以访问其他某个类中的私有成员。

和字面意思类似,可以理解为某个类将此函数或此类当作它的“友(friend)”,就可以访问这个类中的所有私有成员。


友元函数与友元类的特性

优点: 友元函数与友元类的存在,大大提高了代码编写的效率,能使代码表达更简洁,清晰

缺点: 友元函数破坏了类的封装机制,会破坏类的密封性。


友元函数的使用

普通友元函数 : 在类A的里面声明此友元函数,在类A的外面定义此友元函数(访问某类的私有成员 )

类B的成员函数作为类A的友元函数:先定义类B,然后在类A中声明类B的成员函数为其友元函数,最后定义类B的成员函数

#include <bits/stdc++.h>
using namespace std;

class Point{
    public:
//      Point();
        Point(int _x,int _y) : x(_x),y(_y){};
        Point(Point & p);
        int getx(){return x;}
        int gety(){return y;}
        friend double get_path(Point & a,Point & b);
    private:
        int x,y;
};

double get_path(Point & a,Point & b)
{
    double res = 1.0 * (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y);
    return sqrt(res);
}

int main()
{
    int x1,y1,x2,y2;
    while(cin>>x1>>y1>>x2>>y2){
        Point a(x1,y1);
        Point b(x2,y2);
        cout<<get_path(a,b)<<endl;
    }

    return 0;
}

L_ZO0J{A9237YPVROW1I}12.png


关于使用友元函数友元类的注意

  • 注意顺序成员函数作为友元函数的类定义要在友元函数访问的类定义之前。

  • 友元关系不能被继承。
  • 友元关系是单向的,不具有交换性。
  • 友元关系不具有传递性。

综上所述,虽然友元函数与友元类有时会方便代码的编写,但对封装性的破坏也是需要重视的,所以,使用前,注意思考是否得不偿失。

标签:友元,知识点,函数,Point,int,成员,小结,友元类
来源: https://www.cnblogs.com/rainyy/p/11606038.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有