实验报告 实验三友元函数的设计
- 格式:doc
- 大小:63.50 KB
- 文档页数:4
C++上机实验报告实验三一、实验目的本次 C++上机实验的目的是通过实际操作,深入理解和掌握 C++编程中的一些重要概念和技术,包括类与对象、构造函数与析构函数、成员函数的定义与使用等,提高编程能力和问题解决能力。
二、实验环境操作系统:Windows 10编程软件:Visual Studio 2019三、实验内容1、定义一个学生类(Student),包含学生的姓名(name)、学号(id)、年龄(age)和成绩(score)等私有数据成员。
2、为学生类定义构造函数和析构函数,在构造函数中初始化学生的信息,在析构函数中输出学生对象被销毁的提示信息。
3、定义成员函数用于设置和获取学生的信息。
4、在主函数中创建学生对象,调用成员函数进行信息的设置和获取,并输出学生的信息。
四、实验步骤1、首先,打开 Visual Studio 2019 编程软件,创建一个新的 C++项目。
2、在项目中创建一个名为“Studenth”的头文件,用于定义学生类。
```cppinclude <iostream>include <string>class Student {private:std::string name;int id;int age;double score;public:Student(std::string n, int i, int a, double s) {name = n;id = i;age = a;score = s;std::cout <<"创建学生对象" << std::endl;}~Student(){std::cout <<"销毁学生对象" << std::endl;}void setName(std::string n) {name = n;}std::string getName(){return name;}void setId(int i) {id = i;}int getId(){return id;}void setAge(int a) {age = a;}int getAge(){return age;}void setScore(double s) {score = s;}double getScore(){return score;}};```3、在项目中创建一个名为“maincpp”的源文件,用于实现主函数。
实验三函数的应用实验三函数的应用实验3函数的应用(2学时)一、实验目的1.掌握函数的定义和调用方法。
2.练习重载函数的使用。
3.练习函数模板的使用。
4.练习使用系统函数。
5.学习使用VC++的调试功能,并使用stepinto跟踪到该功能的内部。
二、实验任务1.编写函数将华氏温度转换为摄氏温度,转换公式为。
C=(f-32)*5/9。
2.编写重载函数maxl,可以分别计算两个整数、三个整数、两个双精度数和三个双精度数的最大值。
3.使用重载函数模板重新实现上小题中的函数maxl。
4.使用系统函数pow(x,y)计算Zi的值。
请注意,其中包括头文件mathh。
5.用递归方法编写函数,计算斐波那契级数,观察递归调用过程。
三、实验步骤1.编写函数floatconvert(floatmpfer),参数和返回值为float类型,实现算法C=(f-32)*5/9,在main()函数中实现输入和输出。
程序名称:lab3_1。
cpp2.分别编写四个同名函数maxl,实现函数重载,在main()函数中测试函数功能。
程序名:lab3_2.cpp。
3.使用函数模板查找任何类型的最大数量。
对于不同数量的参数,编写两个同名函数模板maxl。
参数个数不同,实现函数重载,并在main()函数中测试函数。
程序名称:lab3_3.cpp4.在main()函数中提示输入两个整数x、y,使用cin语句得到x、y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。
程序名.1ab3_4.cpp。
5.编写递归函数intfib(intn),在主程序中输入n的值,调用fib函数计算斐波那契级数。
公式为FIB(n)=FIB(n-1)+FIB(n-2),n>2;fib(1)=fib(2)=1.使用if语句判断函数的退出,使用cout语句在程序中输出提示信息。
程序名称:lab3_5.cpp6.使用debug中的stepinto追踪到函数内部,观察函数的调用过程,参考程序如下:/lab3_5#includeintfib(intn);intmain(){intn,回答cout<cin>>ncout<库特<intfib(int,n){库特<cout<{cout<7.调试步骤如下:(1)选择菜单命令build|startdebug|stepin,或按下快捷键fll,系统进入单步执行状态,程序开始运行,并出现一个dos窗口,此时visualstudio中光标停在main()函数的入口处。
《C++程序设计》实验报告准考证号xxxxxx题目:友元运算符重载和类运算符重载姓名xxx 日期xxx 实验环境:Visual C++ 6.0- 1 -- 2 -实验内容与完成情况实验目的:1,掌握运算符重载的必要性2,掌握友元运算符重载的一般格式3,掌握类运算符重载的一般格式4,掌握重载后的运算符的使用格式实验内容:1,设计一个类定义相关的数据成员和成员函数重载加、减运算符,实现对象的加减运算定义相关函数实现对象中数据的输出显示2,定义成员函数时,将成员函数定义在类体之外3,设计main 函数创建多个对象进行对象的加减运算,并输出运算后对象的数据并输出结果源程序代码://类运算符的重载实现#include <iostream>using namespace std;class base{double ra;double ia;public: base(double r=0,double i=0){ ra=r; ia=i;cout<<"构造base 对象"<<ra<<"+"<<ia<<"i"<<endl;}base operator +(base a){ cout<<"开始+操作->"<<endl;double r=a.ra+ra; double i=a.ia+ ia; base s(r,i);cout<<"完成+操作,实现复数相加"<<endl;return s; }base operator -(base a){ cout<<"开始-操作->"<<endl;double r=a.ra-ra; double i=a.ia-ia; base s(r,i);cout<<"完成-操作,实现复数相减"<<endl;return s; }void show(){ cout<<"对象中存放的复数值为:"<<ra<<"+"<<ia<<"i"<<endl; }}; void main(){ base c1(2,6),c2(3,2),c3,c4;c3=c2.operator+(c1); c3.show();c4=c1+c2;c4.show();出现的问题解决方案(列出遇到的问题和解决办法,列出未解决的问题)- 3 -。
实验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;}运行结果:实验总结:。
函数实验报告总结函数实验报告总结引言:函数是计算机编程中的重要概念,它能够将一组输入映射为输出,是程序设计中模块化和可重用性的基石。
为了更好地理解函数的概念和使用方法,我们进行了一系列的函数实验。
本文将对这些实验进行总结和归纳,探讨函数在实际编程中的应用。
实验一:函数的定义和调用在这个实验中,我们学习了函数的基本概念和语法。
通过定义一个简单的函数,我们了解了如何使用关键字“def”来定义函数,并通过调用函数来执行其中的代码块。
这个实验让我们明白了函数的封装性和可复用性,可以将一段代码封装成函数,供其他地方调用。
实验二:函数的参数传递在这个实验中,我们学习了函数的参数传递方式。
通过定义带有参数的函数,我们了解了函数参数的不同类型,包括位置参数、关键字参数和默认参数。
我们还学习了如何在函数调用时传递参数,并探讨了参数传递的机制和注意事项。
这个实验让我们对函数的灵活性和可变性有了更深入的理解。
实验三:函数的返回值在这个实验中,我们学习了函数的返回值。
通过定义带有返回值的函数,我们了解了如何使用关键字“return”来返回函数执行的结果。
我们还学习了函数返回值的类型和用途,包括返回单个值、返回多个值和返回空值。
这个实验让我们明白了函数的结果可以被其他代码使用,提高了代码的灵活性和可扩展性。
实验四:递归函数在这个实验中,我们学习了递归函数的概念和用法。
通过定义递归函数来解决问题,我们了解了递归的原理和应用场景。
我们还学习了递归函数的优缺点,包括代码简洁但可能导致性能问题。
这个实验让我们对递归思想和算法有了更深入的认识,提高了问题解决的能力。
实验五:高阶函数在这个实验中,我们学习了高阶函数的概念和用法。
通过定义接受函数作为参数或返回函数的函数,我们了解了高阶函数的特点和应用场景。
我们还学习了匿名函数和函数式编程的基本概念,以及如何使用内置函数和自定义函数来实现高级功能。
这个实验让我们对函数的扩展性和灵活性有了更深入的理解。
实验八对象成员、友元的应用一、实验目的和要求1.对象成员的赋值形式。
2. 掌握静态成员的使用3. 掌握友元函数的使用。
二、实验内容1.定义学生类student,和成绩类score。
要求:(1)score包含有数学成绩、英语成绩、计算机基础成绩等数据成员,成员函数自己发挥想象;(2)学生包含有:姓名、学号、成绩对象成员;定义学生类的构造函数、析构函数、设定值的函数等,自己发挥想象,尽可能的加入更多的成员函数;(3)在类中加入静态成员count统计学生人数;(4)定义声明任意友元函数,访问学生类的私有成员(5)锻炼C++多文件的组成,把类的声明部分和使用部分分开使用。
(6)定义日期类,扩充学生类的数据成员,加入学生出生日期成员。
完成相关的应用(7)发挥想象,分别加入对象数组和对象指针的应用。
三、实验结果及心得程序为://日期类#include<iostream>using namespace std;class data{private:/*char *year;char *month;char *day;*/int year;int month;int day;public://data (char *y,char *m,char *d);data(int y,int m,int d);};data::data(int y,int m,int d){year=y;month=m;day=d;}//data::data(char *y,char *m,char *d)/*{year=new char[strlen(y)+1];strcpy(year,y);month=new char[strlen(m)+1];strcpy(month,m);day=new char[strlen(y)+1];strcpy(day,d);}*/void data::show(){cout<<" 出生日期:"<<year<<"-"<<month<<"-"<<day<<endl; }//成绩类#include <iostream>#include<string>using namespace std;class score{private:double english;double math;double computer;public:score(double e,double m,double c);void show();};score::score(double e,double m,double c){english=e;math=m;computer=c;}{cout<<" 英语成绩:"<<english<<endl;cout<<" 数学成绩:"<<math<<endl;cout<<" 计算机成绩:"<<computer<<endl;}//学生类#include <iostream>#include<string>using namespace std;//class score;class student{private:string name;string xuehao;static int count;score score1;data data1;public:student(string n,string xh,double s1,double s2,double s3,int d1,int d2,int d3);~student();void show();};int student::count=0;//初始化静态变量student::student(string n,string xh,double s1,double s2,double s3 ,int d1,int d2,int d3):score1(s1,s2,s3),data1(d1,d2,d3)//定义构造函数,引用score类{name=n;xuehao=xh;count++;//初始化一次,count加1,从而统计学生人数cout<<"共有学生"<<count<<"名"<<endl;}student::~student(){cout<<"调用析构函数!"<<endl;}void student::show(){cout<<" 姓名:"<<name<<endl;cout<<" 学号:"<<xuehao<<endl;score1.show();data1.show();}#include<iostream>#include<string>using namespace std;#include "score.h"#include "data.h"#include "student.h"int main(){student stu[3]={student("马林","001",89,97,93,1990,7,13), student("李芳","002",83,97,78,1989,9,19),student("李阳","003",92,93,95,1990,10,15)};stu[0].show();stu[1].show();stu[2].show();return 0;}结果为:文- 汉语汉字编辑词条文,wen,从玄从爻。
面向对象程序设计实验报告南方医科大学医工学院实验报告三实验名称:静态成员函数和友元学时安排:课内1+课外3实验类别:综合性实验实验要求:3人1组完成人:学号姓名 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的和任务1)掌握静态、动态生存期的概念;2)掌握静态数据成员和函数成员的概念3)掌握友元函数的含义,友元函数和成员函数的区别,掌握友元函数设计的方法二、实验原理介绍验证性实验,通过运行课本例题,了解并熟悉以下过程:建立类及对象,用类的成员函数和对象访问类的成员;利用建立类的构造函数,完成类的成员的初始化。
三、实验设备介绍软件需求: Visual C++ 6.0硬件需求:建议配置是Pentium III 450以上的CPU处理器,64MB以上的内存,200MB 的自由硬盘空间、CD-ROM驱动器、24位真彩色显示卡、彩色显示器。
四、实验内容1、设计并测试一个矩形类(Rectangle),属性为矩形的左下与右上角的坐标,矩形水平放置。
操作为计算矩形周长与面积。
类对象的数据由友元函数来进行访问。
并对比友元函数、成员函数和普通函数使用上的不同。
#include <iostream>#include <cmath>using namespace std;class Rectangle{public:Rectangle(int t=0, int l=0, int d=0, int r=0){top=t;left=l;down=d;right=r;}~Rectangle() {};//Circum() {return 2*(fabs(top-down)+fabs(left-right));}//Area() {return (fabs(top-down))*(fabs(left-right))}friend void cal(Rectangle r);//括号中要写上类名和内容private:int top,left,down,right;void cal(Rectangle r) //不用带参数{cout<<"矩形的长是:"<<fabs(r.left-r.right)<<endl;cout<<"矩形的宽是:"<<fabs(r.top-r.down)<<endl;cout<<"矩形的周长是:"<<2*(fabs(r.top-r.down)+fabs(r.left-r.right))<<endl;cout<<"矩形的面积是:"<<(fabs(r.top-r.down))*(fabs(r.left-r.right))<<endl;}int main(){Rectangle r1(100,200,600,400);cal(r1);return 0;}2、定义Boat与Car两个类,二者都有weight属性,定义它们的一个友元函数totalWeight(),计算二者的重量和。
三元组实验报告
一.需求分析
用三元组方式压缩稀疏矩阵并实现加法运算
二.概要设计
稀疏矩阵内有很多无意义数据,故可以对其进行压缩,而只保留有价值的数据,以此提升空间利用效率
三.详细设计
首先设计结构,来保存我们需要的矩阵行列元素个数以及每个元素所在的行列和它的值,之后设计函数分别实现create display add errorpd(pd==判断)
加上主函数,一个新鲜的程序出炉啦!!!
四.调试分析
我给忘了。
有个break;漏掉了,导致程序运行总会让一个值变大,
通过调试后运行无误,但是忘了保存了。
五.测试结果
1.对于矩阵自身的判断
2.对于矩阵是否可相加的判断
3.程序运行无误
六.实验总结
其实我还是指针短板,可以理解指针的前提之下,对于指针应用一塌糊涂。
不过好在我正在学习!
在编写过程中之前由于没有明确break;的用法,故而调试出错,这让我深刻的认识到程序编写容不得一点马虎。
同时,本程序中我用的是. 而不是->但我是知道这点的D-)
七.源码
三元组.cp p。
实验三一、实验目的1、掌握运用成员函数、友元函数实现运算符重载的方法;2、掌握重载运算符函数的调用方法二、知识点1、重载运算符函数的一般格式函数类型 operator 运算符名称(形参列表)2、重载双目运算符定义一个复数类Complex,重载运算符“+”,“-”,“*”,“/”,使之能用于复数的加、减、乘、除。
编程序,分别求两个复数之和、差、积和商。
#include <iostream>using namespace std;class Complex{ double real, imag;public:Complex(){real=0;imag=0;}Complex(double r, double i);void display();friend Complex operator*(Complex &c1,Complex &c2);};Complex::Complex(double r, double i){ real=r;imag=i;}void Complex::display(){ cout<<“该复数为:”;cout<<real<<"+"<<imag<<"i"<<endl;}Complex operator *(Complex &c1,Complex &c2){Complex complex;complex.real=c1.real*c2.real-c1.imag*c2.imag;complex.imag=c1.imag*c2.real+c1.real*c2.imag;return complex;}void main(){ Complex c1(1,2), c2(3,4);c1.display();c2.display();Complex c4=c1*c2;c4.display();}3、重载单目运算符有一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走一秒,满60秒进一分钟,此时秒又从0开始算。
第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)直角坐标系下二重积分的计算比极坐标系下二重积分的计算复杂。
班级学号姓名实验3 this指针、静态数据成员和友元函数的使用1、实验目的和要求(1)掌握显式使用this指针的方法(2)掌握静态数据成员的意义及使用方法(3)掌握友元函数的使用方法2、实验内容(1)(1)有如下类的定义。
其中类成员函数copy() 用于实现两个对象间的拷贝。
请用两种方法完成该函数的实现:1、隐式使用this 指针;2、显式使用this 指针,同时保证在copy()函数的定义中(包括参数),都不直接使用对象名;运行结果:x=10y=20x=30y=40(2)商店经销一种货物,该货物成箱购进,成箱卖出,购进和卖出时按每箱的重量计价。
商店需要记录下目前库存的货物的总重量和总价值。
编写一个程序,通过定义类Carlo来模拟商店货物购进和卖出的情况。
(3)类Intcase和类Floatcase分别为整型数集合类和实型数集合数类。
将以下程序中缺少的内容补齐,并完成其后要求。
运行结果:1 42 53 6运行结果:1 42 53 63、实验总结(1)C++为成员函数提供了一个隐含参数—— this 指针当一个类的对象被创建时,this 指针就被初始化指向该对象this 是一个隐含指针,不能被显式说明this 是一个局部量,局部于某一对象,在任何非静态成员内可见this 是一个常指针,不能被修改和赋值(2)静态数据成员实际上是类域中的全局变量。
静态数据成员被类的所有对象所共享,包括该类派生类的对象。
静态数据成员可以成为成员函数的可选参数,而普通数据成员则不可以。
静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。
(3)友元函数的特点是能够访问类中的私有成员的非成员函数。
友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样。
第1篇一、实验目的1. 理解函数的概念及作用。
2. 掌握函数的声明、定义和调用方法。
3. 学习函数的参数传递和返回值。
4. 熟悉函数的嵌套调用和递归调用。
二、实验原理函数是程序设计中的一种基本概念,它将一系列具有特定功能的代码封装在一起,以便重复使用。
函数的主要作用是将复杂的程序分解为多个模块,提高代码的可读性和可维护性。
在C语言中,函数分为两大类:标准函数和自定义函数。
标准函数是C语言库函数,如printf()、scanf()等;自定义函数是由程序员根据实际需求编写的函数。
函数的基本结构如下:```c函数返回类型函数名(参数列表) {// 函数体}```三、实验内容1. 函数的声明函数声明用于告诉编译器函数的存在,包括函数名、返回类型和参数列表。
函数声明格式如下:```c函数返回类型函数名(参数类型参数名);```2. 函数的定义函数定义是函数声明的具体实现,包括函数名、返回类型、参数列表和函数体。
函数体由大括号{}包围,包含一系列执行语句。
```c函数返回类型函数名(参数类型参数名) {// 函数体}```3. 函数的调用函数调用是指程序中调用函数的过程。
调用函数时,需要按照函数的参数列表提供相应的实参。
```c函数名(实参1, 实参2, ..., 实参n);```4. 函数的参数传递函数的参数传递主要有两种方式:值传递和地址传递。
(1)值传递:将实参的值复制给形参,函数内部对形参的修改不会影响实参。
(2)地址传递:将实参的地址传递给形参,函数内部通过修改形参的地址来修改实参的值。
5. 函数的返回值函数的返回值是指函数执行完毕后返回给调用者的值。
函数返回值类型必须与函数声明时指定的返回类型一致。
6. 函数的嵌套调用函数嵌套调用是指在一个函数内部调用另一个函数。
嵌套调用的函数可以递归调用自身。
7. 函数的递归调用递归调用是指函数在执行过程中直接或间接地调用自身。
递归调用分为直接递归和间接递归两种。
一、实验目的:掌握类中静态成员的定义方法,初始化方法,使用方法;掌握类的友元说明方法,理解友元的使用特点二、实验内容: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,包含学生姓名,成绩,设计一个友员函数,将学生成绩按大到小排序。
南昌大学实验报告学生姓名:张虹学号: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;}六、实验数据及处理结果。
实验三静态成员和友元函数实验名称:静态成员和友元函数学时安排:2实验类别:设计性实验实验要求:1人1组一、实验目的和任务1)熟练掌握友元函数设计的方法2)掌握友元函数的含义,友元函数和成员函数的区别。
二、实验原理介绍根据要求正确定义静态成员和友元函数。
将别的模块声明为友元,使类中本隐藏的信息如私有和保护成员就可以被友元访问。
三、实验设备介绍软件需求: Visual C++ 6.0硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB 以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。
四、实验内容和步骤【实验3-1】静态成员为账户类ACCOUNT增加静态成员count和 InterestRate表示账户数量和利率,增加静态成员函数GetCount返回账户数目 GetInterestRate返回银行利率class ACCOUNT {public:ACCOUNT(string accno,string name,float balance);~ACCOUNT();void Deposit(float amount);void Withdraw(float amount);float GetBalance();void Show(void);static int GetCount();static float GetInterestRate();private:static int count;static float InterestRate;string _accno,_accname;float _balance;};【实验3-2】友元函数为账户类ACCOUNT增加一个友元函数,实现账户结息,要求输出结息后的余额(不计算利息税),并在main函数中调用进行测试。
friend void Update(ACCOUNT& a);【实验3-3】(加分题)在main函数中,设计一个ACCOUNT类型的数组,为数组中的10个对象初始化,并调用成员函数测试存款、取款、显示等函数,再调用友元函数测试进行结息。
多元函数及其微积分实验总结引言多元函数及其微积分是数学分析中的重要内容,研究多个变量之间的关系及其在空间中的表示。
微积分则是研究函数的变化、连续性以及变化率等概念的工具。
实验是学习和应用多元函数及其微积分知识的重要手段,通过实验可以深入理解多元函数的性质和微积分原理。
实验一:多元函数的图像和性质1. 实验目的通过绘制多元函数的图像,探究其性质和特点,加深对多元函数的理解。
2. 实验步骤1.选择一个多元函数,如f(x,y)=x2+y2;2.绘制函数的三维图像,并观察图像的特点;3.分别在坐标平面上绘制函数在不同的切面上的二维图像;4.分析函数的图像及其性质。
3. 实验结果与分析1.函数的三维图像呈现出一个抛物面,中心在原点,高度随着距离原点的距离增加而增加;2.在不同的切面上,二维图像形状相同,但大小和位置有所变化;3.函数具有对称性,关于坐标轴对称;4.函数无驻点和拐点,最小值为 0。
实验二:多元函数求导1. 实验目的学习多元函数的偏导数和全微分的概念,掌握多元函数求导的方法和技巧。
2. 实验步骤1.选择一个多元函数,如f(x,y)=3x2+2xy+y2;2.计算函数的偏导数和全微分;3.利用偏导数和全微分计算函数在某点处的变化率和切平面;4.分析函数在不同点的变化率和切平面的特点。
3. 实验结果与分析1.函数的偏导数分别为∂f∂x =6x+2y和∂f∂y=2x+2y;2.全微分为df=(6x+2y)dx+(2x+2y)dy;3.函数在某点处的变化率由偏导数给出,表示沿着x轴和y轴方向的变化率;4.切平面由全微分给出,表示函数在某点处的切线和切面。
实验三:多元函数的极值1. 实验目的学习多元函数的极值概念和求解方法,掌握求多元函数极值的技巧。
2. 实验步骤1.选择一个多元函数,如f(x,y)=x2+y2−xy;2.计算函数的偏导数,并解方程组找到驻点;3.利用二阶偏导数判别法判断驻点的类型;4.分析函数在不同区域的极值情况。
太原工业学院计算机工程系
调
试
过
程
及
实
验
结
果
方法一、方法二、方法三可以输出相同的实验结果,所以实验结果如下:
总结
用多种方法得到了同样的实验结果,学习了多种关于友元的知识。
对于同一个实验目的,可以有多种解决方法,通过不同的途径达到相同的目的。
附录方法一:非成员函数作为友元函数
#include "iostream.h"
#include "string.h"
#include "iomanip.h"
class Student;
class Score
{
public:
Score(int math,int english);
friend void showscore(Student &);
private:
int math;
int english;
};
class Student
{
public:
Student(int number,char *name,int math,int english):so(math,english) {
this->number=number;
strcpy(this->name,name);
}
friend void showscore(Student &);
private:
int number;
char name[8];
Score so;
};
Score::Score(int math,int english)
{
this->math=math;
this->english=english;
}
void showscore(Student &s)。