// friend_func.cpp : Defines the entry point for the console application.
写一个函数求两个点的中点
//友元函数可以访问类的私有成员,但友元函数不是类的成员函数
/*#include "stdafx.h"
#include <iostream>
#include<stdlib.h>
using namespace std;class Point
{friend Point middle(const Point& p1, const Point &p2);public:Point(float a,float b);~Point();void print(){cout << "x=  " << x << ", y= " << y << endl;}float get_X(){return x;}float get_Y(){return y;}
private:float x, y;
};Point::Point(float a, float b):x(a),y(b)
{
}Point::~Point()
{
}
Point middle(const Point& p1, const Point &p2)
{Point mid_point((p1.x + p2.x) / 2, (p1.y+ p2.y) / 2);//访问私有成员,不被允许return mid_point;
}
int main()
{Point p(1, 3);Point q(1, 5);middle(p, q).print();system("pause");return 0;
}*/
//友元类
#include "stdafx.h"
#include <iostream>
#include<stdlib.h>
using namespace std;class Circle;//前向声明,表示有一个类为Circle,但此时编译器并不知道该类的具体声明和实现
class Point
{
public:Point();Point(float a, float b);~Point();void print()const;friend class Circle;//声明友元类,Circle类中的所有函数均可以访问私有变量x,y//友元函数不受访问属性限制,因此无论放在public和private中均可以friend const Point middle(const Point& u, const Point& v);//声明友元函数private:float x, y;
};Point::Point() :x(0), y(0)
{cout << "Default Constructor   is called!";
}
Point::Point(float a, float b) :x(a), y(b)
{
}
Point::~Point()
{
}
//middle是友元函数,不是成员函数
const Point  middle(const Point& u, const Point& v)
{Point mid_point((u.x+v.x)/2.0,(u.y+v.y)/2.0);return mid_point;
}
void Point::print()const
{cout << "(" << x << " , " << y <<")"<< endl;
}
//###############################################################
class Circle
{
public:Circle();~Circle();Circle& move(float a, float b);void print() const ;private:float radius;Point center;
};Circle::Circle():radius(0.0f)
{center.x = 0.0f;center.y = 0.0f;
}Circle::~Circle()
{
}
Circle& Circle::move(float a, float b)
{center.x += a;center.y += b;return *this;
}
void Circle::print()const
{center.print();//打印圆心,Center是point类cout << "radius = " << radius << endl;
}int main()
{Point p1(1.0, 2.0);Point p2(3.0, 4.0);cout << "第一个点:";p1.print();cout << "第二个点:";p2.print();cout << "两个点的中点是:";middle(p1, p2).print();Circle c;c.print();cout << "移动圆心: ";c.move(10.0, 10.0);c.print();system("pause");return 0;
}

friend之友元函数和友元类相关推荐

  1. C++ 笔记(30)— 友元函数与友元类

    我们知道类的私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行.这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦. ...

  2. C++友元函数和友元类(C++ friend)详解

    在看VISP视觉库的时候遇到友元函数: Friends void swap (vpDetectorAprilTag &o1, vpDetectorAprilTag &o2) 在定义一个 ...

  3. 模板类中使用友元函数的方式,派生类友元函数对基类的成员使用情况

    在一般友元函数的前面加上 template<typename T),注意在函数的声明和定义处都要加这个模板 例如: //模板类,长方体类 template <typename Elemen ...

  4. c++友元函数与友元类

    友元函数和友元类的需要: 类具有封装和信息隐藏的特性.只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的.非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这 ...

  5. C++友元函数和友元类(一)

    在 C++ 中,一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们 ...

  6. C++语言基础(15)-友元函数和友元类

    一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们来介绍一种例外情 ...

  7. C++ 友元(友元函数和友元类)

    友元的作用:提高了程序的运行效率(使得普通函数可以直接访问类的保护数据,避免了类成员函数的频繁调用,即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和隐藏性,使得非成员函数可以访问 ...

  8. C++:友元(非成员友元函数、成员友元函数、友元类)

    3.8  友元:友元函数和友元类 友元函数 :既可以是不属于任何类的非成员函数,也可以是另一个类的成员函数,统称为友元函数.友元函数不是当前类的成员函数,而是独立于类的外部函数,但它可以访问该类所有的 ...

  9. c++远征之模板篇——友元函数、友元类

    以下内容源于慕课网的学习整理,如有侵权,请告知删除. 一.友元函数 1.分类 全局函数-->友元全局函数 成员函数-->友元成员函数 2.关键字friend 友元全局函数 如下,利用fri ...

最新文章

  1. RabbitMQ脑裂问题解决方案调查
  2. java app上传图片接口_接口app 接口中上传 图片
  3. 可视化篇(二)———使用matplotlib绘制常用3D图形及案例
  4. Python报错:IndentationError: unindent does not match any outer indentation level解决办法
  5. Effective Java之抛出与抽象相应的异常(六十一)
  6. 用c实现部分java数组功能,很烂,留个参考吧
  7. idea 一直在build_CEO季度表彰团队| 我们一直在做最酷的事
  8. 三观碎一地:轮子天天见,车轮悖论却2000年无解?
  9. oracle函数建立码值,Oracle函数与存储过程
  10. Android内存优化11 内存泄漏常见情况2 线程持久化
  11. 站长常用的15个建站助手网站工具软件
  12. 解决夜神模拟器连接不上问题
  13. Exp2 后门原理与实践 20154328 常城
  14. 阿里云跨账号迁移云服务器实例
  15. html textarea 缩放,textarea自动撑开缩放
  16. 苹果中国首家直营店选址北京三里屯
  17. 如何通过name获取单选框和复选框选中状态的value值?
  18. QQ是怎么实现通讯的
  19. 使用HMMER搜索PFam
  20. 【图像几何】基于傅里叶+DCT图像变换matlab代码

热门文章

  1. Thread Group(线程组)
  2. JAVA常见的排序算法
  3. 关于 href=javascript:; 到底做了什么
  4. Codeforces Round #260 (Div. 1) A - Boredom DP
  5. android sdk 更新用的HOSTS
  6. 在ListBox中添加ToggleButton(有IsChecked属性)
  7. dblclick,默认全选屏蔽
  8. VC开发多语言界面支持的简单方法
  9. 自然语言处理库——NLTK
  10. 区块链预言机(2)预言机概念