第七周任务二 友元函数

本文介绍了一个简单的C++程序,用于计算二维平面上两点之间的距离。程序定义了一个CPoint类,并通过成员函数和友元函数实现了不同方式的距离计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:    friend class                          
* 作        者:   姜雅明                              
* 完成日期:   2012      年   04    月   03     日
* 版  本  号:    1.0      


* 对任务及求解方法的描述部分
* 输入描述: 点
* 问题描述: 计算点之间的距离
* 程序输出: 输出点之间的距离
* 程序头部的注释结束

*/

#include <iostream>
#include <cmath>
using namespace std;

class CPoint  
{
private:  
	double x;  // 横坐标  
	double y;  // 纵坐标  
public: 
	CPoint(double xx=0,double yy=0):x(xx),y(yy){}
	friend double Distance1(CPoint &c1, CPoint &c2);
	double Distance(CPoint p) const;
	double getx() {return x;};
	double gety() {return y;};
};

double CPoint::Distance(CPoint p) const
{
	return sqrt((p.x - x) * (p.x - x) + (p.y - y) * (p.y - y));
}

double Distance1(CPoint &c1, CPoint &c2)
{ 
	return sqrt((c1.x - c2.x) * (c1.x - c2.x) + (c1.y - c2.y) * (c1.y - c2.y));
}

double Distance2(CPoint &c1, CPoint &c2)
{
	return sqrt((c1.getx() - c2.getx()) * (c1.getx() - c2.getx()) + (c1.gety() - c2.gety()) * (c1.gety() - c2.gety()));
}

void main()
{
	CPoint c1(2,5);
	CPoint c2(5,8);

	cout << "1.      类;两点间的距离为:" << c1.Distance(c2) << endl;
	cout << "2.友元函数;两点间的距离为:" << Distance1(c1, c2) << endl;   //友元函数显示两点间的距离
	cout << "3.普通函数;两点间的距离为:" << Distance2(c1, c2) << endl;   //普通函数显示两点间的距离
	system("pause");
}


这个感觉还好吧,不是很难···

c++面向对象程序设计代码,写出完整程序,不要让程序使用或出现空间分配器,只要main.cpp的代码。实验七:友元与算符重载 1、实验目的 (1)掌握友元机制,理解友元函数和友元类的定义与应用场景,能正确使用友元机制。 (2)理解运算符重载的概念、意义、使用规则。 (3)掌握重载运算符为成员函数、全局函数的方法。 2、实验内容 (1)基础任务 实现运算符重载与友元函数的核心功能。 1)对通讯录条目类CommEntry,使用全局函数且非CommEntry友元方式重载运算符 << 和 >>,使其可用于CommEntry类的输入输出。对于Comms类,使用全局函数且非Comms 友元方式重载运算符 <<,使其可用于输出通讯录Comms 中的所有条目。支持以下操作。 CommEntry ce; cin >> ce; cout << ce; Comms comms; cout << comms; 2)修改第 1)步中的运算付重载,使其为对应类的友元函数,实现与第1)步同样的功能。体会友元函数的优点。 3)对通讯录条目类CommEntry,使用成员函数方式重载运算符 <<,使其可用于各种条目类的输出。思考一下,使用这种方式重载输出运算符 <<,有什么问题? 4)对于通讯录类Comms、各种条目类,重载输入和输出运算符 >>、<<,使得这些类可以使用cin 和cout 进行输入和输出操作。 (2)进阶任务 1)重载比较运算符。在 CommEntry 中重载 == 运算符,可用如下代码方式,判断两个联系人是否相同,规则是若同名同电话,则认为是同一个联系人。 if (entry1 == entry2) { /* ... */ } (3)高阶任务 (选做)使用移动语义优化对象传递,减少拷贝开销。示例代码如下。 CommEntry(CommEntry&& other); (4)实验验证 1)测试重载的运算符>> << 是否可正常工作。 2)测试重载的运算符 == 是否可正常工作。
最新发布
06-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值