实验报告 实验三友元函数的设计

合集下载

C++上机实验报告 实验三

C++上机实验报告 实验三

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++程序设计实验 友元和类运算符重载

C++程序设计实验 友元和类运算符重载

《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友元

实验报告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;}运行结果:实验总结:。

函数实验报告总结

函数实验报告总结

函数实验报告总结函数实验报告总结引言:函数是计算机编程中的重要概念,它能够将一组输入映射为输出,是程序设计中模块化和可重用性的基石。

为了更好地理解函数的概念和使用方法,我们进行了一系列的函数实验。

本文将对这些实验进行总结和归纳,探讨函数在实际编程中的应用。

实验一:函数的定义和调用在这个实验中,我们学习了函数的基本概念和语法。

通过定义一个简单的函数,我们了解了如何使用关键字“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,从玄从爻。

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

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

面向对象程序设计实验报告南方医科大学医工学院实验报告三实验名称:静态成员函数和友元学时安排:课内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(),计算二者的重量和。

青岛理工大学C 实验上机实验报告(3)

青岛理工大学C  实验上机实验报告(3)

a=i;b=j;c=l;
y=j;
}
}
private:
virtual void disp(){
double a,b,c;
cout<<"y= "<<y<<endl;
};
}
double triangle::area(){
private:
int y;
double p=(a+b+c)/2;
};int main()
double r;
3
v=0):hour(i),minute(j),second(v)
};
{}
double circle::area()
void get();
{
void display();
return r*r*PI;
Time (Time &);
}
Time operator + ( Time);
int main()
"<<minute<<" : "<<second<<endl;
class Triangle
}
{
Time Time::operator + (Time time)
public:
{
Triangle(double i=0.0,double j=0.0,double
Time t;
v=0.0):a(i),b(j),c(v)
else {
t.hour=hour+24-time.hour; } return t; }Int main() {Time time1,time2,time3; time1.get(); time2.get(); time3=time1+time2; cout<<"时间的加法结果: \n"; time3.display(); time3=time1-time
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

太原工业学院计算机工程系









方法一、方法二、方法三可以输出相同的实验结果,所以实验结果如下:
总结
用多种方法得到了同样的实验结果,学习了多种关于友元的知识。

对于同一个实验目的,可以有多种解决方法,通过不同的途径达到相同的目的。

附录方法一:非成员函数作为友元函数
#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)。

相关文档
最新文档