/*
* 程序的版权和版本声明部分:
* Copyright (c) 2013, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作 者:周经纬
* 完成日期:2014年 4月 8日
* 版 本 号:v12.1
* 成员函数,友元函数和一般函数有区别,
* 输入描述:无
* 问题描述:。
* 程序输出:
* 问题分析:略
* 算法设计:略
*/
#include <iostream>
#include <cmath>
using namespace std;
class dddd
{
public:
dddd(int x1,int y1,int x2,int y2):Xx1(x1),Xx2(x2),Yx1(y1),Yx2(y2) {}
void display1(); //display1是成员函数
friend void display2(dddd &); //display2是友元函数
int getXx1()
{
return Xx1;
}
int getXx2()
{
return Xx2;
}
int getYx1()
{
return Yx1;
}
int getYx2()
{
return Yx2;
}
private:
int Xx1;
int Xx2;
int Yx1;
int Yx2;
};
void dddd::display1() //成员函数display1的实现,dispaly1前加Time::
{
//以hour形式直接访问私有数据成员,实质是this->hour形式
double d;
cout<<"("<<Xx1<<","<<Yx1<<")"<<"("<<Xx2<<","<<Yx2<<")"<<endl;
d=sqrt((Yx2-Yx1)*(Yx2-Yx1)+(Xx2-Xx1)*(Xx2-Xx1));
cout<<"两点间的距离是:"<<d<<endl;
}
void display2(dddd &t) //友元函数dispaly2的实现,不加Time::,友元并不是类的成员
{
//虽然不是类的成员函数,却可以用t.hour的形式直接访问私有数据成员——这就是友元
double d;
cout<<"("<<t.Xx1<<","<<t.Yx1<<")"<<"("<<t.Xx2<<","<<t.Yx2<<")"<<endl;
d=sqrt((t.Yx2-t.Yx1)*(t.Yx2-t.Yx1)+(t.Xx2-t.Xx1)*(t.Xx2-t.Xx1));
cout<<"两点间的距离是:"<<d<<endl;
}
void display3(dddd &t) //display3是一般函数,dispaly3前不加Time::
{
//不能直接访问,只能用公共接口t.getHour()形式访问私有数据成员
double d;
cout<<"("<<t.getXx1()<<","<<t.getYx1()<<")"<<"("<<t.getXx2()<<","<<t.getYx2()<<")"<<endl;
d=sqrt((t.getYx2()-t.getYx1())*(t.getYx2()-t.getYx1())+(t.getXx2()-t.getXx1())*(t.getXx2()-t.getXx1()));
cout<<"两点间的距离是:"<<d<<endl;
}
int main()
{
dddd t1(10,13,56,58);
t1.display1(); //成员函数这样调用:对象名.函数名()
display2(t1); //友员函数的调用和一般函数无异(但实现中可以不同)
display3(t1); //一般函数的调用
return 0;
}
感悟:这是我根据老师的例子,完全靠自己一点一点修改琢磨出来的,也许对兄弟们来说这题很简单,刚开始我看到老师有例题,我也感觉简单,但是往往不做题不了解做题的思想,短短的程序,自己想要想很多的方面,一点不对程序就跑不起来,看懂别人的跟自己做出来的完全不同的效果跟激励,就跟张梦佳说他那道题看错了一点,结果半小时没了似的,看别人的往往只看大体思路,完全对编程习惯没有任何帮助,当自己做题时手还是按不下按键,想不出思路总想看别人的给自己点启发,所以说以后我要尽量克服看一眼别人的才有思路的毛病,这题花了半小时,但我挺开心的。