友元函数实验报告

合集下载

实验报告4友元

实验报告4友元

实验4 友元班级: 11511 学号: 20113051131 姓名:张文静成绩:1、实验目的(1)理解友元的作用;(2)掌握友元的定义和使用方法。

2、实验内容(1)定义一个Time类和Date类,并将Time类中的成员函数display声明为Date类的友元,通过Time类中的display成员函数引用Date类对象的私有数据,输出年、月、日和时、分、秒。

每个类都必须要有构造函数和析构函数。

(2)定义一个表示点Point类和一个由直线方程y=ax+b确定的直线类Line。

Point类有x和y 两个成员,分别表示点的横坐标和纵坐标。

Line类有两个数据成员a和b,分别表示直线方程中的系数a和b。

Line类有一个成员函数print用于显示直线方程;友元函数setPoint(Lint &l1,Lint &l2)用于求两条直线的交点。

在主函数中,建立两个直线对象,分别调用print函数显示两条直线的方程,并调用函数setPoint求这两条直线的交点。

3、实验总结(1)#include<iostream>using namespace std;class Date;class Time{private:int hour,minute,second;public:Time(int,int,int);~Time() {}void display(Date &d1);};class Date{private:int year,month,day;public:Date(int,int,int);~Date() {}friend void Time::display(Date &d1);};Time::Time(int h,int m,int s){hour=h;minute=m;second=s;}Date::Date(int y,int m1,int d){year=y;month=m1;day=d;}void Time::display(Date &d1){cout<<"DATE:"<<d1.year<<"."<<d1.month<<"."<<d1.day<<endl;cout<<"Time: "<<hour<<":"<<minute<<":"<<second<<endl;}int main(){Date d1(1991,05,24);Time t1(05,24,36);t1.display(d1);return 1;}运行结果:(2)#include<iostream>using namespace std;class Line;class Point{private:double x,y;public:Point(double,double);~Point() {}void setPoint(Line &,Line &);};class Line{private:double a,b;public:Line(double,double);~Line() {}void print();friend void Point::setPoint(Line &,Line &);};Point::Point(double x1,double y1){x=x1;y=y1;}Line::Line(double a1,double b1){a=a1;b=b1;}void Line::print(){cout<<"方程为:y="<<a<<"2x-"<<b<<endl;}void Point::setPoint(Line &l1,Line &l2){x=(double)(l2.b-l1.b)/(l1.a-l2.a);y=l1.a*x+l1.b;cout<<" the cross point is: ("<<x<<","<<y<<")"<<endl; }int main(){Line l1(4,8),l2(5,7);l1.print();l2.print();Point p(0,0);p.setPoint(l1,l2);return 1;}运行结果:实验总结:。

实验6 静态成员函数与友元

实验6 静态成员函数与友元
for(int i=0;i<3;i++)
Prod[i].total();
Product::display();
return 0;
}
四、分析与讨论
实验内容设计部分的源代码要给出必要的注释,说明设计思路和语句、函数的含义。
通过实验对友元函数有了一些了解,他不是类的成员函数,对于静态函数成员,它不随对象有建立而分配空间,也不随对象的撤销而释放,静态成员函数没有this指针
学 号
姓 名
专业班级
2013级计算机科学与技术
实验地点
指导教师
时间
2014.5.8
一、实验目的及要求
1、掌握静态、动态生存期的概念;
2、掌握静态数据成员和静态成员函数的概念;
3、掌握友元函数的含义,友元函数和成员函数的区别,掌握友元函数的设计方法。
4、学习友元函数和友元类的组合使用方法。
二、实验设备(环境)及要求
【验证题目】验证教材相关例题
9.11
分析:静态成员函数是类的一部分而不是对象的一部分。如果在类外调用公用的静态成员函数,要用类名和域运算符“::”而在本源代码中说明了静态成员函数引用非静态数据成员的方法,但是在C++中要习惯:只用静态成员函数引用静态数据成员,而不引用非静态数据成员。
9.12
分析:display是一个在类外定义的且未用类Time作限定的函数,它是非成员函数,不属于任何类。但由于声名了display是Time类的frieng函数,所以display函数可以引用Time中的私有成员
参考程序如下:
//lab6_2.cpp
实验源代码:
#include <iostream>
#include <cmath>

实验六静态成员与友元

实验六静态成员与友元

实验六静态成员与友元实验六静态成员与友元【实验目的】1.掌握友元函数的定义、使用方法以及特点。

2.握静态成员函数和静态数据成员的功能。

【实验内容】1.调试下列程序,写出输出结果,并分析输出结果。

#include "iostream.h"class My{public:My(int aa){A=aa;B-=aa;}static void fun(My m);private:int A;static int B;};void My::fun(My m){cout<<"A="<<m.a<<endl;< bdsfid="86" p=""></m.a<<endl;<>cout<<"B="<<b<<endl;< bdsfid="88" p=""></b<<endl;<> }int My::B=100;int main(){My P(6),Q(8);My::fun(P);Q.fun(Q);return 0;}2.设计一个含有静态成员、静态成员函数的程序,分析程序结果,理解静态成员(函数)与类和对象的关系。

参考程序:#includeclass A{friend class B;//友元类的声明public:void Set(int i){x=i;}friend int add(A & f1);// 友元函数的声明void Display()cout<<"x="<<x<<",y="<<y<<endl;< bdsfid="110" p=""></x<<",y="<<y<<endl;<>}private:int x;static int y;};int add(A & f1){return f1.x+1;}class B{public:B(int i,int j);void Display();private:A a;//A类的对象a作为类B的私有成员};int A::y=1;//静态成员必须先赋初值B::B(int i,int j){a.x=i;A::y=j;}void B::Display(){cout<<"x="<<a.x<<",y="<<a::y<<endl;< bdsfid="135" p=""></a.x<<",y="<<a::y<<endl;<>}void main(){A b;b.Set(5);//友元函数的调用cout<<add(b)<<endl;< bdsfid="142" p=""></add(b)<<endl;<>b.Display();B c(6,9);//a.x=6,X::y=9;c.Display();b.Display();}问题:⑴、分析友元函数add()的定义、调用与成员函数的区别。

实验9-友元函数、友元类-new

实验9-友元函数、友元类-new

L
选作内容: 选作内容:
2、分析下列程序的输出结果-6分 、分析下列程序的输出结果 分 #include <iostream.h> class C{ public: C(){var++;} static int var; }; int C::var= 0; void main() { cout <<"C::var =" <<C::varห้องสมุดไป่ตู้<<endl; C c1 ; cout <<"cl.var="<<c1.var<<endl; C c2, c3 ; cout<<"c2.var ="<< c2.var <<endl; }
L

L
选作内容: 选作内容:
3、分析下列程序的输出结果-5分 、分析下列程序的输出结果 分 #include <iostream.h> class A {public: A(); void Show() ; ~A(); private: static int c;}; int A::c =0; A::A() { cout <<"constructor"<< endl; c+=10;} void A::Show() { cout<<"c="<<c<<endl;} A::~A() { cout<<"destructor "<< endl;} void main() { A a,b; a. Show(); b. Show();}

实验报告_实验6 运算符重载(2)

实验报告_实验6 运算符重载(2)

实验报告_实验6 运算符重载(2)(学生学号
_姓名)
实验目的:
1、掌握使用友元函数重载运算符方法。

2、熟悉=、[]、插入(<<)、提取(>>)等运算符重载的方法;
3、通过案例了解运算符重载的应用效果;
4、熟悉标准库string类的基本用法;
5、了解CTime等MFC类中的运算符重载情况。

实验内容
1、(基础题)掌握用友元函数重载运算符的方法
要求:在下列程序的适当位置添加代码,,使用友元函数方法实现下列运算符重载:
添加的程序代码:
2、(基础题)程序代码:
3、(基础题)运行下列程序,体会、理解长度可变整型数组类的功能与实现方法,并回答相关问题。

(1)该类有哪几个数据成员?各具有什么功能?
(2)构造对象时要完成哪些工作?
(3)调用成员函数push_back(int v)如何扩展数组大小?
(4)该类怎样实现数组对象的赋值运算?
4、(基础题)回答问题:
问题1:如何生成名为school,内容为:广州大学华软软件学院字符串?
问题2:能否将C语言中的字符串直接赋给string对象?
问题3:如何取出string str=”计算机系计算机科学与技术专业”中的“计算机科学与技术专业”子串?
问题4:string::npos表示什么?它有什么用途(写出一种即可)?
问题5:请说明insert()的基本用法。

问题6:请说明replace()的基本用法。

多元函数积分实验报告(3篇)

多元函数积分实验报告(3篇)

第1篇一、实验目的1. 掌握多元函数积分的基本概念和计算方法。

2. 熟悉不同坐标系下多元函数积分的计算过程。

3. 学会运用数学软件进行多元函数积分的计算。

二、实验内容1. 多元函数积分的概念及性质2. 直角坐标系下二重积分的计算3. 极坐标系下二重积分的计算4. 三重积分的计算5. 第一类曲线积分的计算6. 第一类曲面积分的计算三、实验步骤1. 多元函数积分的概念及性质(1)定义:设函数f(x,y)在区域D上连续,将区域D划分为若干个子区域,每个子区域上取一点(x_i,y_i),构造积分和式:∮_D f(x,y) dxdy = ∑_i f(x_i,y_i) ΔS_i当子区域的直径趋于0时,积分和式极限存在,则称此极限为函数f(x,y)在区域D 上的二重积分。

(2)性质:线性性质、保号性、区域可加性、对称性。

2. 直角坐标系下二重积分的计算(1)画出积分区域D,确定积分限。

(2)选择积分次序,按照积分次序将二重积分转化为两个一重积分。

(3)计算一重积分。

3. 极坐标系下二重积分的计算(1)将直角坐标系下的积分区域D转换为极坐标系下的积分区域D'。

(2)将直角坐标系下的函数f(x,y)转换为极坐标系下的函数f(r,θ)。

(3)按照极坐标系下的积分次序计算二重积分。

4. 三重积分的计算(1)画出积分区域V,确定积分限。

(2)选择积分次序,按照积分次序将三重积分转化为三个一重积分。

(3)计算一重积分。

5. 第一类曲线积分的计算(1)确定曲线L的参数方程。

(2)计算曲线积分∮_L f(x,y) ds。

6. 第一类曲面积分的计算(1)确定曲面S的参数方程。

(2)计算曲面积分∮_S f(x,y,z) dS。

四、实验结果与分析1. 通过实验,掌握了多元函数积分的基本概念和计算方法。

2. 学会了在不同坐标系下进行多元函数积分的计算。

3. 运用数学软件进行多元函数积分的计算,提高了计算效率。

4. 通过实验,发现以下规律:(1)直角坐标系下二重积分的计算比极坐标系下二重积分的计算复杂。

实验6 静态成员和友元函数

实验6 静态成员和友元函数

实验六静态成员和友元函数一、实验目的1)掌握静态成员的定义和使用2)掌握友元函数设计的方法3)掌握友元函数的含义,友元函数和成员函数的区别。

二、实验题目题目1. 设计一个类,分析静态数据成员的引用方法要求:(1)阅读程序,理解静态成员变量的声明与引用方法。

(2)调试程序,观察a.xPos, a.yPos, b.xPos, b.yPos, a.count, b.count, Point::count这七个变量的存储地址。

由此,你得出什么结论?代码提交要求:提交整个工程的源代码及得出的结论。

题目2 静态成员账户类Account定义如下。

其中静态成员count和InterestRate表示账户数量和利率,静态成员函数GetCount返回账户数目,GetInterestRate返回银行利率。

要求实现该类。

题目3 友元函数为账户类Account增加一个友元函数,实现账户结息,要求输出结息后的余额(不计算利息税),并在main函数中调用进行测试。

friend void Update(Account& a);题目4(选做题)在main函数中,设计一个Account类型的数组,为数组中的10个对象初始化,并调用成员函数测试存款、取款、显示等函数,再调用友元函数测试进行结息。

⏹Account accArray[10]; //静态数组的方法⏹Account * accArray= new Account [10]; //动态数组的方法cout<<"帐户数目:"<<Account::GetCount()<<endl;注:1. 用以上方法时,会调用缺省构造函数,此时应将构造函数修改成缺省构造函数,例如:Account(char accno[] = “000”, char name[]=”noname”, double b=0.0)2. 对各对象再进行设置时,可增加一个setData函数,用于设置账号、姓名和余额。

实验三 类的友元

实验三 类的友元

一、实验目的:掌握类中静态成员的定义方法,初始化方法,使用方法;掌握类的友元说明方法,理解友元的使用特点二、实验内容:1 .编写程序,统计某旅馆住宿客人的总数,要求输入客人姓名,输出客人编号(按先后顺序自动生成),姓名以及总人数。

依次输入旅客的名字,按“!”结束输入,之后则显示旅客编号和姓名;程序源代码如下:#include "stdafx.h"#include<iostream>#include<stdlib.h>#include<string.h>#define NAMESIZE 30using namespace std;class passenger{private:char name[NAMESIZE];public:static int countPsg;void set_name(char newName[NAMESIZE]){strcpy(name,newName);}void get_name(){cout<<this->name<<endl;}};int passenger::countPsg=0;int main(){char name[NAMESIZE];passenger psg[100];cout<<"Please input the passenger's name and enter ! "<<endl;cin>>name;while(name[0]!='!'){psg[passenger::countPsg++].set_name(name);cout<<"Next passenger's name: ";cin>>name;}for(int i=0;i<passenger::countPsg;i++){cout<<"The passenger's identifier is : "<<i+1<<" "<<"The passenger's name is:";psg[i].get_name();}cout<<"The mount of the passengers is: "<<passenger::countPsg<<endl;system("pause");return 0;}2编写学生类Stu,包含学生姓名,成绩,设计一个友员函数,将学生成绩按大到小排序。

实验四 静态成员和友元

实验四  静态成员和友元

实验三数组、指针、静态成员和友元
一.实验目的和要求
1.掌握对象数组定义与使用方法。

2.理解对象指针的概念,学会用指针引用对象。

3.了解this指针的工作方式。

4.掌握友元的概念、友元函数的定义与使用方法。

5.掌握静态数据成员与静态成员函数的定义与使用方法。

二.实验内容
定义一个类Stock,记录一支股票交易的基本信息,包括交易日序号(表示本月的第几个交易日,用整数表示)、当日最高价、当日最低价、当日开盘价和当日收盘价。

尽量发挥想象力,为该类设计成员函数。

1.使用股票类Stock,定义一个对象数组存放连续5个交易日的股票信息。

编写一个主函数,计算两个Stock对象(前后两日)的当日收盘价计算当日涨幅。

用指针引用对象数组中的两个对象。

在主函数中调用该函数计算从第2个交易日开始每天的当日涨幅。

2.在Stock类中定义一个静态数据成员,记录当前Stock对象的数量。

3.设计一个成员函数Assign_stock()为对象赋值,其中的形式参数是对另一个Stock对象的引用,使用this指针避免对自己的赋值,在主函数中显示用Assign_stock()赋值的对象。

4.定义一个友元函数计算Stock对象的当日开盘价是否高于当日收盘价。

若是,返回真;否则,返回假。

C++实验报告友元函数与友元类1

C++实验报告友元函数与友元类1

南昌大学实验报告学生姓名:张虹学号:6100409033 专业班级:网络工程091实验类型:□验证□综合□设计□创新实验日期:实验成绩:一、实验项目名称友元函数二、实验目的1.理解类的友元函数、友元类三、实验基本原理定义类X、Y、Z,函数h(X*),满足:类X的私有成员i,Y的成员函数g(X*)是X的友元函数,实现对X的成员i加1,类Z是类X的友元类,其成员函数f(X*)实现对X的成员i加5,函数h(X*)是类X的友元函数,实现对X的成员i加10。

在一个文件中定义和实现类,在另一个函数中实现main函数。

四、主要仪器设备及耗材PC微机Windows 操作系统VC 程序集成环境五、实验步骤按要求编写以下代码头文件:#include<iostream>using namespace std;class X;class Y{public:int g(X &a);};class Z{public:int f(X &a);};class X{public:friend int Y::g(X &a);friend int h(X &a);friend class Z;void set();private:int i;};void X::set(){int a;cin>>a;i=a;}int h(X &a){a.i=a.i+10;return a.i;}int Y::g(X &a){a.i=a.i+1;return a.i;}int Z::f(X &a){a.i=a.i+5;return a.i;}主函数:#include "class1.h"#include<iostream>using namespace std;void main(){X x1;Y y1;Z z1;cout<<"请输入类X中i的初始值:";x1.set();cout<<"i=i+1="<<y1.g(x1)<<endl;cout<<"i=i+5="<<z1.f(x1)<<endl;cout<<"i=i+10="<<h(x1)<<endl;}六、实验数据及处理结果。

C++实验友元函数等

C++实验友元函数等

2 点类Point,包含点的坐标x、y两个数据成员,设计两个友元函数,分别计 算两点间的水平距离和垂直距离。 class Point{ friend int calcH(const Point&, const Point&); friend int calcV(const Point&, const Point&); private: int x,y; public: Point(int i = 0, int j = 0): x(i),y(j) { } };
• //接上
void main() { A a; a.f(a); //通过对象调用静态成员函数 A::f(a); //通过类作用域操作符调用静态成员函数 }
析构函数
• 构造函数的一个用途是自动获取资源,在 构造函数中分配了资源后,需要一个对应 操作自动回收或收,作 为类构造函数的补充!
static类成员
• 与普通数据成员的区别: 通常,非static数据成员存在于类类型的每 个对象中;static数据成员独立于该类的任 意对象而存在,每个static数据成员是与类 关联的,并不与该类的对象相关联。
使用static成员的优点
• 1. static成员的名字是在类的作用域中,因 此可以避免与其他类的成员或全局对象名 字冲突。 • 2.可以实施封装。Static成员可以是私有成 员,而全局对象不行。 • 3. 通过阅读程序容易看出static成员是与特 定类关联的,清晰的显示程序员的意图。
void main() { char* name = getName1(); cout<<name<<endl; //输出什么? name = getName2(); cout<<name<<endl;//输出什么? }

静态成员和友元实验报告

静态成员和友元实验报告
(3)判空,即判断当前栈(即链表)是否为空,也就是判断记录数组中数据元素个数的变量是否为0。
三、概要设计(实现的功能,函数原型及说明等)
应用VC++6.0的编辑环境构造一个类Stack,设计一个整数链表类,实现栈操作。类中需有记录结点个数的数据成员(静态成员),要有判空操作。编制应用程序,取100次随机数(<1000),如果取到的随机数比前一个随机数大的话,入栈,然后逐个取出(即出栈过程)求其和。
对本次试验进行总结:
1.作时应认真仔细。对代码进行分模块测试,
2.应对实验整体架构进行了解。
3.实验操保证其正确性。
4.试验完后对错误进行总结分析。
七、附录(源程序代码,需有相应注释)
#include<iostream>
#include<stdlib.h>
#include <malloc.h>
#include<stdio.h>
return true;
}
int Stack::Pop() //出栈函数
{
SNode *p=new SNode;
int e;
static int count=1;
p=head;
e=p->data;
head=p->next;
free(p);
count++;
return e;
}
int GetSum(Stack &A)求和函数定义
{
count++;
A.Push(x);
cout<<x<<" ";
if(count%10==0)

实验9-静态成员和友元函数

实验9-静态成员和友元函数

淮海工学院计算机工程学院实验报告书课程名:《 C++程序设计》题目:实验九静态成员和友元函数班级:学号:姓名:1、实验内容或题目(1)教材P310第2题,分析程序,写出其运行的输出结果。

(2)P311,第4题。

(3)P312,第9题,(注意:不考虑商店的统一折扣discount)。

(4)P313,第10题。

2、实验目的与要求(1)进一步加深对类和对象的理解。

(2)掌握对象数组、对象的指针及其使用方法。

(3)掌握静态成员和静态成员函数的使用方法。

(4)掌握友元的概念和使用。

(5)了解类模板的使用方法。

3、实验步骤与源程序⑴实验步骤答:读题,回想相关知识点,上机编写程序,并运行修改。

总结知识点,分析出错原因。

⑵源代码第一题#include <iostream>using namespace std;class Date{public:Date(int,int,int);Date(int,int);Date(int);Date();void display();private:int month;int day;int year;};Date::Date(int m,int d,int y):month(m),day(d),year(y){} Date::Date(int m,int d):month(m),day(d){year=2005;}Date::Date(int m):month(m){day=1;year=2005;}Date::Date(){month=1;day=1;year=2005;}void Date::display(){cout<<month<<"/"<<day<<"/"<<year<<endl;}int main(){Date d1(10,13,2005);Date d2(12,30);Date d3(10);Date d4;d1.display();d2.display();d3.display();d4.display();return 0;}第二题//建立一个对象数组,存放五个学生的数据(学号和成绩) //用指针指向数组首元素,输出一.三.五同学数据//建立一个对象数组,存放五个学生的数据(学号和成绩) //用指针指向数组首元素,输出一.三.五同学数据#include <iostream>using namespace std;class Student{ public:Student(int,float);void display();private:int num;float score;};Student::Student(int n,float s):num(n),score(s){} void Student::display(){cout<<num<<" "<<score<<" "<<endl;}int main(){ int i;Student *p;Student stu[5]={Student(1,89.5),Student(2,78),Student(3,86),Student(4,54),Student(5,76)};cout<<"输出第一,第三,第五个同学的数据"<<endl;p=stu;for(i=0;i<3;i++){ p->display();*(p+=2);}return 0;}第三题:#include <iostream>using namespace std;class Goods{ public:Goods(int n,int q,float p):num(n),quantity(q),price(p){};//定义构造函数 void total();static float average(); //声明两个静态公用成员函数static void display();private:int num;int quantity;float price;static float sum; //定义两个静态数据成员static int n;};void Goods::total() //定义非静态成员函数{sum=sum+quantity*price; //计商品总销售款n=n+quantity; //计今日此商品总销售件数}void Goods::display() //定义静态成员函数{cout<<"商品总销售款:"<<sum<<endl;cout<<"每件商品的平均售价:"<<average()<<endl;}float Goods::average() //定义静态成员函数{return(sum/n);} //求商品的平均售价float Goods::sum=0; //以下两行是对静态数据成员初使化int Goods::n=0;int main(){Goods goods[3]={Goods(101,5,23.5),Goods(102,12,24.56),Goods(103,100,21.5)}; //定义对象数组并对其初使化for(int i=0;i<3;i++)goods[i].total();Goods::display(); //调用静态成员函数return 0;}第四题:#include <iostream>using namespace std;class Date; //对Date类的提前引用声明class Time{public:Time(int,int,int);friend void display(const Date &,const Time &); //声明display函数是Time类的友元函数private:int hour;int minute;int sec;};Time::Time(int h,int m,int s) //定义Time类的构造函数{hour=h;minute=m;sec=s;}class Date{public:Date(int,int,int);friend void display(const Date &,const Time &); //声明display函数是Time 类的友元函数private:int month;int day;int year;};Date::Date(int m,int d,int y) //定义Date类的构造函数{month=m;day=d;year=y;}void display(const Date &d,const Time &t) //普通display函数定义{cout<<d.month<<"/"<<d.day<<"/"<<d.year<<endl;cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;}int main(){Time t1(10,12,56); //定义Time类对象t1Date d1(12,25,2004);//定义Date类对象d1display(d1,t1); //调用display函数,实参是Date类对象d1和Time类对象t1return 0;}4、测试数据与实验结果(可以抓图粘贴)第一题:第二题:第三题:第四题:5、结果分析与实验体会。

实验四 友元

实验四 友元
友元函数友元类友元的作用是友元函数声明友元函数继承友元的作用什么是友元友元函数的作用友元类声明什么是友元函数
College of Information and Communication Engineering
实验四 友元
Tuesday, November 01, 2011
电工电子实践教学中心
实验目的: 实验目的:
定义矩阵类,使用友元实现矩阵的常用运算。 注意:先对矩阵进行抽象。
实验总结
(1)总结本实验设计可采用的设计方案。 (2)对本次实验成败之处及其原因分析。 (3)做好本实验需要把握的关键环节。 (4)本实验可行性、可改进的地方、建议等。
了解为什么要使用友元。 掌握友元函数、友元成员、友元类的定义和使用 方法。
实验内容1: 实验内容 :
定义复数类Complex,使用友元,完成复数的加 法、减法、乘法、除法运算,以及对复数的输出 。 注意:友元的实现有两种形式即友元函数与友元 类验内容 (选做):

实验八友元函数与友元类

实验八友元函数与友元类

实验八友元函数与友元类实验八友元函数与友元类1、实验目的掌握友元函数和友元类的说明方法,理解友元函数和友元类的使用特点。

2、实验内容(1)设计一个包含两个整数数据成员的类,利用友元函数求这两个数的平方差。

// 123.cpp : 定义控制台应用程序的入口点。

//#include"stdafx.h"#includeusing namespace std;class number{private :int a,b;public:number(int c,int d){a=c;b=d;}friend void calculate(number &n){cout<<n.a*n.a-n.b*n.b<<endl;< p="">}};int _tmain(int argc, _TCHAR* argv[]){number n1(3,5);calculate(n1);return 0;}(2)设计一个班级类(专业名,班级号,10个学生的姓名,10个学生的成绩),再设计一个友元函数求该班级学生中的的最高分和最低分,并输出对应的分数和姓名。

// 123.cpp : 定义控制台应用程序的入口点。

//#include"stdafx.h"#includeusing namespace std;//计一个班级类(专业名,班级号,个学生的姓名,个学生的成绩),//再设计一个友元函数求该班级学生中的的最高分和最低分,并输出对应的分数和姓名。

class classscore{private :char major;int classnumber;char name;int score;public:classscore (int m,int cn,char n,int s){major=m;cn=classnumber;name=n;score=s;}friend void highlow(classscore cs[10]){int max=0,min=100,maxi=0,mini=0;for(int i=0;i<10;i++){if (cs[i].score>max){maxi=i;max=cs[i].score;}if (cs[i].score<min)< p="">{mini=i;min=cs[i].score;}}cout<<"min:"<<cs[mini].score<<" "<<cs[mini].name<<"="" "<<endl;<="" p="">cout<<"max:"<<cs[maxi].score<<""<<cs[maxi].name<<"="" "<<endl;<="" p="">}};int _tmain(int argc, _TCHAR* argv[]){classscore cs[10]={classscore('EE',131,'a',90),classscore('EE',131,'b',85),classscore('EE',131,'c',87),classscore('EE',131,'d',93),classscore('EE',131,'e',83),classscore('EE',131,'f',80),classscore('EE',131,'g',75),classscore('EE',131,'h',97),classscore('EE',131,'i',77),classscore('EE',131,'j',65)};highlow(cs);return 0;}(3)日期类Date包含日期的年、月、日三个数据成员,编写一个友元函数,求两个日期之间相差的天数。

实验四++友元函数与友元类

实验四++友元函数与友元类

实验四友元函数与友元类实验目的●理解和掌握友元函数的意义和使用●理解和掌握友元类的意义和使用实验示例[例4-1] 设计一个描述点的类,其中包含一对坐标点数据成员、一个求两个点之间距离的友元函数和显示坐标点的成员函数,并编程测试。

解题思路:计算两点(a,b)和(c,d)之间的距离,依据勾股定理可得公式:2)2a--+cb)((d并定义坐标点类的友元函数来计算两点间的距离。

实现步骤:1.新建Win32 Console Application程序项目2.在文件编辑区窗口编写如下程序代码:#include <iostream.h>#include <math.h>class point{double x,y;public:void setvalue(double, double);//初始化void show();friend double dist(point, point);//友元类};void point::setvalue(double a, double b){x=a; y=b;}void point::show(){cout<<"点("<<x<<","<<y<<")";}double dist(point p1,point p2){return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));}void main(){point p1,p2;p1.setvalue(2,3);p2.setvalue(5,6);p1.show();cout<<"到";p2.show();cout<<"的距离是:"<<dist(p1,p2)<<endl;}3.编译、链接和执行程序[例4-2] 运用友元关系定义一个学生的类和一个成绩的类,其中使得成绩类对象可以访问学生对象的私有数据,并编程测试。

c++友元 实验报告

c++友元  实验报告
cout<<"该学生的高数成绩math: "<<s.math<<"分 英语成绩English: "<<s.english<<"分\n";
}
主函数.Cpp(方法二)
#include<iostream> //方法2:成员函数作为友元函数
#include"Student1.h"
#include<cstdlib>
double math;
double english;
public:
Score(double m,double e);
virtual ~Score();
friend void display(Score &)
#include "Student1.h"
#include<iostream>
#include"Student1.h" //包含Student1.h文件
#include<cstdlib>
using namespace std;
int main()
{
system("color 3f"); //颜色控制
Student st1(132054137,"刘创");
Score sc1(91,87);
class Student
{
private:
int number;
char name[8];
public:
Student(int num,char na[8]);
virtual ~Student();

实验8报告

实验8报告

高等程序设计实验报告实验名称实验8 友元系别姓名学号班级实验时间实验地点实验成绩一、实验目的及要求理解友元的含义,掌握友元函数、友元类的定义方法和实现二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等)硬件设备:联网的个人计算机操作系统:Windows xp编译系统:Visual C++ 6.0三、实验内容及步骤(包含简要的实验步骤流程)1、编写一个程序,设计一个类Trig,满足如下条件:(1)给定三角形的三条边成x,y,z;(2)给定三角形的三个定点的坐标;要求:用一个友元函数计算两个三角形面积之和。

2、编写一个学生类student,包括学生的编号、姓名、班级和成绩。

要求:(1)设计一个友元函数,输出成绩大于等于80分以上者;(2)设计一个友元函数,比较两个学生成绩的高低,并求出最高分者和最低分者;3、设计一个类Sample,它有两个私有数据成员A[]和n(A中元素的个数)。

请对A[]中数据进行插入排序、冒泡排序,并将排序函数放入到友元类process中。

四、实验结果(包括程序或图表、结论陈述、数据记录及分析等,可附页)1、编写一个程序,设计一个类Trig,满足如下条件:(1)给定三角形的三条边成x,y,z;(2)给定三角形的三个定点的坐标;要求:用一个友元函数计算两个三角形面积之和。

#include<iostream>#include<cmath>using namespace std;class Trig{double x,y,z;double x1,y1;double x2,y2;double x3,y3;public:Trig(double a,double b,double c){x=a;y=b;z=c;}Trig(double a,double b,double c,double d,double e,double f) {x1=a;y1=b;x2=c;y2=d;x3=e;y3=f;x=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));y=sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));z=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));}friend double area(Trig &);};double area(Trig &a){double s;s=(a.x+a.y+a.z)/double(2);return sqrt(s*(s-a.x)*(s-a.y)*(s-a.z));}int main(){double xx1,xx2,xx3,xx;double yy1,yy2,yy3,yy;double zz;cout<<"请输入一个三角形的三边长:"<<endl;cin>>xx>>yy>>zz;Trig A1(xx,yy,zz);cout<<"三角形面积为:"<<area(A1)<<endl;cout<<"请输入一个三角形的三个顶点坐标:"<<endl;cin>>xx1>>yy1;cin>>xx2>>yy2;cin>>xx3>>yy3;Trig A2(xx1,yy1,xx2,yy2,xx3,yy3);cout<<"三角形面积为:"<<area(A2)<<endl;return 0;}2、编写一个学生类student,包括学生的编号、姓名、班级和成绩。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程名称:VC++程序设计专业名称班级学号姓名实验(4):实验日期【实验名称】友元【实验目的】1)了解为什么要使用友元2)掌握友元函数、友元成员、友元类的定义和使用方法【实验内容和结果】1. 定义复数complex类,使用友元,完成复数的加法、减法、乘法、除法运算,以及对复数的输出。

#include<iostream>using namespace std;//复数加法公式://复数减法公式://复数乘法公式://复数除法公式:class complex{double real;double image;public:complex(double r=0,double i=0){real=r;image=i;}friend void inputcomplex(complex&com);friend complex addcomplex(complex&c1,complex&c2);friend complex subcomplex(complex&c1,complex&c2);friend complex mulcomplex(complex&c1,complex&c2);friend complex divcomplex(complex&c1,complex&c2);friend void outputcomplex(complex&com);};void inputcomplex(complex &com){cin>>com.real>>com.image;}complex addcomplex(complex&c1,complex&c2){complex c;c.real=c1.real+c2.real;c.image=c1.image+c2.image;return c;}complex subcomplex(complex&c1,complex&c2){complex c;c.real=c1.real-c2.real;c.image=c1.image-c2.image;return c;complex mulcomplex(complex&c1,complex&c2){ complex c;c.real=c1.real*c2.real-c1.image *c2.image;c.image=c1.real*c2.image+c1.image*c2.real;return c;}complex divcomplex(complex&c1,complex&c2){ complex c;int divisor=c2.real*c2.real+c2.image*c2.image;if(!divisor){cout<<"不能被0除"<<endl;exit(-1);}c.real=(c1.real*c2.real+c1.image*c2.image)/divisor;c.image=(c1.image*c2.real-c2.image*c1.real)/divisor;return c;}void outputcomplex(complex &com){if(com.real){cout<<"("<<com.real;if(com.image>0)cout<<"+"<<com.image<<"i";else if(com.image<0)cout<<com.image<<"i";cout<<")";return;}elsecout<<"("<<com.image<<"i"<<")";}int main(){complex c1,c2,result;cout<<"请输入第一个复数的实部和虚部:"<<endl; inputcomplex(c1);cout<<"请输入第二个复数的实部和虚部:"<<endl;inputcomplex(c2);result=addcomplex(c1,c2);outputcomplex(c1);cout<<"+";outputcomplex(c2);cout<<"=";outputcomplex(result);cout<<"\n*******************************"<<endl;result=subcomplex(c1,c2);outputcomplex(c1);cout<<"-";outputcomplex(c2);cout<<"=";outputcomplex(result);cout<<"\n*******************************"<<endl;result=mulcomplex(c1,c2);outputcomplex(c1);cout<<"*";outputcomplex(c2);cout<<"=";outputcomplex(result);cout<<"\n*******************************"<<endl;result=divcomplex(c1,c2);outputcomplex(c1);cout<<"/";outputcomplex(c2);cout<<"=";outputcomplex(result);cout<<"\n*******************************"<<endl;return 0;}实验结果为:请输入第一个复数的实部和虚部:4.2 7.4请输入第二个复数的实部和虚部:9.4 7.8(4.2+7.4i)+(9.4+7.8i)=(13.6+15.2i)*******************************(4.2+7.4i)-(9.4+7.8i)=(-5.2-0.4i)*******************************(4.2+7.4i)*(9.4+7.8i)=(-18.24+102.32i)*******************************(4.2+7.4i)/(9.4+7.8i)=(0.652349+0.24698i)*******************************Press any key to continue2.定义矩阵类,使用友元实现矩阵的常用运算。

#include<iostream>#include<iomanip>using namespace std;class Matrix{int row,col;int*p;public :Matrix(int i=1,int j=1){row=i;col=j;p=new int[row*col];}int getRow(){return row;}int getCol(){return col;}Matrix(const Matrix&ref){row=ref.row;col=ref.col;p=new int[row*col];for(int i=0;i<row*col;i++){p[i]=ref.p[i];}}void operator=(const Matrix&ref){row=ref.row;col=ref.col;p=new int[row*col];for(int i=0;i<row*col;i++){p[i]=ref.p[i];}}~Matrix(){delete []p;}friend void input(Matrix&);friend void display(Matrix&);friend Matrix add(Matrix&,Matrix&);friend Matrix sub(Matrix&,Matrix&);friend Matrix mul(Matrix&,Matrix&);};void input(Matrix& a){cout<<"请输入该矩阵的"<<a.row*a.col<<"个元素值:"<<endl;for (int i=0;i<a.row*a.col;i++)cin>>a.p[i];}void display(Matrix &a){int conter=0;;for (int i=0;i<a.row*a.col;i++){cout<<setw(6)<<setiosflags(ios::left)<<a.p[i];conter++;if(conter%a.col==0)cout<<endl;}}Matrix add(Matrix& a,Matrix& b){Matrix result(a.row,a.col);for (int i=0;i<a.row*a.col;i++)result.p[i]=a.p[i]+b.p[i];return result;}Matrix sub(Matrix& a,Matrix& b){Matrix result(a.row,a.col);for (int i=0;i<a.row*a.col;i++)result.p[i]=a.p[i]-b.p[i];return result;}Matrix mul(Matrix& a,Matrix& b){int i,j,k;Matrix result(a.row,b.col);for (i=0;i<a.row*b.col;i++)result.p[i]=0;for(i=0;i<a.row;i++)for(j=0;j<b.col;j++)for(k=0;k<a.col;k++)result.p[i*b.col+j]+=a.p[i*a.col+k]*b.p[k*b.col+j];return result;}int main(){int row,col;cout<<"请输入第一个矩阵的行数和列数:"<<endl;cin>>row>>col;Matrix a(row,col);input(a);cout<<"请输入第二个矩阵的行数和列数:"<<endl;cin>>row>>col;Matrix b(row,col);input(b);//显示两个矩阵cout<<"第一个矩阵为:"<<endl;display(a);cout<<"第二个矩阵为:"<<endl;display(b);Matrix result;if(a.getRow()||a.getCol()!=b.getCol()){cout<<"这两个矩阵不能做加法和减法"<<endl;}else{result=add(a,b);cout<<"两个矩阵的和为:"<<endl;display(result);result=sub(a,b);cout<<"两个矩阵的差为:"<<endl;display(result);}if(a.getCol()!=b.getRow()){cout<<"这两个矩阵不能做乘法"<<endl;}else{result=mul(a,b);cout<<"两个矩阵的积为:"<<endl;display(result);}return 0;}实验结果为:请输入第一个矩阵的行数和列数:3 2请输入该矩阵的6个元素值:5 4 2 86 8请输入第二个矩阵的行数和列数:2 1请输入该矩阵的2个元素值:2 8第一个矩阵为:5 42 86 8第二个矩阵为:28这两个矩阵不能做加法和减法两个矩阵的积为:426876Press any key to continue3.实现堆栈的压入和弹出。

相关文档
最新文档