zoukankan      html  css  js  c++  java
  • 友元函数知识点小结

    友元函数与友元类的定义

    类的友元函数是定义在类外部,但有权访问类的所有私有(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


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

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

    • 友元关系不能被继承。

    • 友元关系是单向的,不具有交换性。

    • 友元关系不具有传递性。

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

  • 相关阅读:
    【转】工作流持久化的几点说明
    转:壹百度-百度十年千倍的29条法则
    CRM软件设计评测点与采集测评点
    键盘上各按键对应的ASSII值
    导入Excle数据至数据库 “外部表不是预期的格式”错误信息
    浅谈代码的执行效率(2):编译器的威力 [摘自赵劼老师的博客]
    代码的执行效率(3)缓存与局部性 摘自赵劼老师的博客
    浅谈代码的执行效率(一)
    C# Base64加解密图片
    Bulk Insert的用法
  • 原文地址:https://www.cnblogs.com/rainyy/p/11606038.html
Copyright © 2011-2022 走看看