码迷,mamicode.com
首页 > 其他好文 > 详细

第28课 友元的尴尬能力

时间:2016-04-20 00:23:24      阅读:214      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!