首页 > 其他 > 详细

第28课 友元的尴尬能力

时间:2016-04-20 00:20:12      阅读:238      评论:0      收藏:0      [点我收藏+]

1. 友元的概念

(1)友元是C++中的一种关系,友元关系发生在函数与类之间或类与类之间

(2)友元关系是单项的,不能传递

class Point
{
    double x;
    double y;
    friend void func(Point& p);//声明func为Point类的友元函数
}

void func(Point& p){};//在这个函数中,可以访问Point类内的任何成员!

2. 友元的用法

(1)在类中以friend关键字声明友元

(2)类的友元可以是其它类或者具体函数

(3)友元不是类的一部分,也不受类中访问级别的限制,可以直接访问具体类的所有成员

(4)用友元的注意事项

  ①友元关系不具备传递性

技术分享 

  ②类的友元可以是其它类的成员函数(即其它内的成员函数作为该类的友元函数

  ③类的友元可以是某个完整的类(即所有的成员函数都是友元)

【编程实验】友元的使用初探

#include <stdio.h>
#include <math.h>

class Point
{
private:
    double x;
    double y;

public:
    Point(double x, double y)
    {
        this->x = x;
        this->y = y;
    }

    double getX(){return x;}
    double getY(){return y;}

    void getXY()
    {
        printf("x = %f, y = %f\n", x, y);
    }

    friend double Distance(Point& p1, Point& p2);
};

//从这里看,Distance只是一个普通的函数
double Distance(Point& p1, Point& p2)
{
     double ret = 0;
     ret=sqrt((p2.x-p1.x)*(p2.x-p1.x) +
              (p2.y-p1.y)*(p2.y-p1.y));//可以引用类中的私有成员!
     return ret;
}
int main()
{
    Point p1(1, 2);
    Point p2(10, 20);

    p1.getXY();
    p2.getXY();

    printf("|(p1, p2)| = %f\n", Distance(p1, p2));

    return 0;
}

3. 友元的尴尬

(1)友元是为了兼顾C语言的高效而诞生的,但直接破坏了面向对象的封装性

(2)友元在实际产品中的高效是得不偿失的,在现代软件工程中己经逐渐被遗弃

【编程实验】友元的深入分析

 

4. 小结

(1)友元是为了兼顾C语言的高效而诞生的

(2)友元直接破坏了面向对象的封装性

(3)友元关系不具备传递性

(4)类的友元可以是其它类的成员函数

(5)类的友元可以是某个完整的类

第28课 友元的尴尬能力

原文:http://www.cnblogs.com/5iedu/p/5410800.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!