C++の友元の例
#include<iostream>
#include<cmath>
using namespace std;
class Point
{
public:
Point(double xx,double yy)
{
x=xx;
y=yy;
};
void Getxy();
friend double Distance(Point&a,Point&b);
private:
doublex,y;
};
void Point::Getxy()
{
cout<<"("<<x<<","<<y<<")"<<endl;
}
double Distance(Point&a,Point&b)
{
double dx=a.x-b.x;
double dy=a.y-b.y;
return sqrt(dx*dx+dy*dy);
}
int main(void)
{
Point p1(3.0,4.0),p2(6.0,8.0);
p1.Getxy();
p2.Getxy();
double d=Distance(p1,p2);
cout<<"Distanceis"<<d<<endl;
return 0;
}
说明:在该程序中的Point类中说明了一个友元函数Distance(),它在说明时前边加friend关键字,标识它不是成员函数,而是友元函数。它的定义方法与普通函数定义一样,而不同于成员函数的定义,因为它不需要指出所属的类。但是,它可以引用类中的私有成员,函数体中a.x,b.x,a.y,b.y都是类的私有成员,它们是通过对象引用的。在调用友元函数时,也是同普通函数的调用一样,不要像成员函数那样调用。本例中,p1.Getxy()和p2.Getxy()这是成员函数的调用,要用对象来表示。而Distance(p1, p2)是友元函数的调用,它直接调用,不需要对象表示,它的参数是对象。(该程序的功能是已知两点坐标,求出两点的距离。)
最新文章
- iStylePDF c#集成开发示例
- CSS之过渡简单应用—日落西山
- js execCommand
- Irrlicht引擎I 配置
- ct任务添加与中控机批量后台操作
- SqlBulkCopy 简单运用
- 使用Newtonsoft.Json序列化和反序列化对象(源码)
- BNUOJ34973Liserious战队
- 性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项
- SSAS系列——【05】多维数据(编程体系结构)
- 解决android studiogradle 错误 找不到程序包 符号
- char对比varchar
- mfcc的特征提取python 代码实现和解析
- 一个具有缓存数据功能的HttpWebRequest工具类
- word绘图画布
- Jquery调用ajax参数说明
- 【转】Verilog HDL常用建模方式——《Verilog与数字ASIC设计基础》读书笔记(四)
- Redis学习八:Redis的事务
- nginx简单代理配置
- Extjs4常见的调试问题