* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011,
烟台大学计算机学院学生 * All rights reserved
.* 文件名称:
* 作 者: 张艳明
* 完成日期: 2012 年 4 月 4 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
//*
#include<iostream>
#include<cmath>
using namespace std;
enum SymmetricStyle { axisx,axisy,point};//分别表示按x轴, y轴, 原点对称
class CPoint
{
private:
double x; // 横坐标
double y; // 纵坐标
public:
CPoint(double xx = 0,double yy = 0);
double Distance1(CPoint p) ; // 两点之间的距离(一点是当前点,另一点为参数p)
friend double Distance2(CPoint &);
double getx(){return x;}
double gety(){return y;}
void input();
};
double Distance3(CPoint &);
CPoint::CPoint(double xx,double yy):x(xx),y(yy){}
// 两点之间的距离(一点是当前点,另一点为参数p)
// 成员函数的实现,Distance前加Cpoint::,以x,y的形式直接访问私有数据成员
double CPoint::Distance1(CPoint p)
{
return(sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y)));
}
//友元函数的实现,
double Distance2(CPoint &p)
{
CPoint p1;
cout << "请输入一个点" ;
p1.input();
return(sqrt((p1.x - p.x) * (p1.x - p.x) + (p1.y - p.y) * (p1.y - p.y)));
}
//普通函数的实现
double Distance3(CPoint &p)
{
CPoint p1;
cout << "请输入一个点" ;
p1.input();
return(sqrt((p1.getx() - p.getx()) * (p1.getx() - p.getx()) + (p1.gety() - p.gety()) * (p1.gety() - p.gety())));
}
//以x,y 形式输入坐标点
void CPoint::input()
{
char c;
cout << "格式:(x,y):" ;
cin >> x >> c >> y;
while(1)
{
if(c != ',')
{
cout << "格式出错请重输!" << endl;
}
else break;
}
return ;
}
void main()
{
CPoint p1,p2;
cout << "输入第一个点p1:" ;
p1.input();
cout << "输入第二个点p2:";
p2.input();
cout << "这两点之间的距离是:" << p1.Distance1(p2) << endl;//调用成员函数
"这两点之间的距离是:" << Distance2(p1) << endl;//友元函数的调用
cout <<
cout << "这两点之间的距离是:" << Distance3(p1) << endl;//普通函数的调用
system("pause");
}
上机心得:
1友元函数,关键字friend声明,一个类的友元函数可以访问这个类中的私有成员,
2友元函数并不属于类的成员函数,在访问类内的数据成员时,必须制定一个要访问的对象,通过制定的对象来访问私有数据成员
3.而普通函数只能通过调用类的成员函数来访问类的私有成员。
本文介绍了一个简单的C++程序,该程序定义了一个表示二维坐标点的类,并实现了计算两点间距离的功能。通过成员函数、友元函数及普通函数三种方式展示了不同类型的函数如何访问类的私有成员。
212

被折叠的 条评论
为什么被折叠?



