第一篇:信息系C++实验报告(练习)
信息工程系课程实验报告
姓
名
学
号
实验学时 2 实验时间 2017 年 12 月 15 日
实验地点
指导教师
课程名称 C++程序设计 专
业班
级
成绩
实验项目 运算符重载、虚函数、纯虚函数、抽象类 实 验 目 的 1、理解运算符重载的作用; 2、掌握实现运算符重载的方法; 3、理解虚函数、纯虚函数、抽象类的特性 4、掌握利用虚函数实现动态多态性的方法 实 验 内 容 和 要 求 1、阅读“程序 1.txt”,分析程序运行结果,然后上机调试验证分析结果。
2、阅读“程序 2.txt”,分析程序运行结果,然后上机调试验证分析结果。
以上二题不用抄题也不用写分析结果
3、阅读“程序 3.txt”,然后回答以下问题:
1)行 A、行 B、行 E 的输出结果分别是、、,为什么是这样的输出结果
2)将行 A 改成 p->X::f();,其输出结果为:,为什么
3)将行 C 改成 A *p=&a;,行 A 调用类
的 f 函数,输出,行 B 调用类的 g 函数,输出
,行 E 调用类的k 函数,输出。
4)将行 C 改成 A *p=&a;,后,要想调用基类 X 的 g 函数,行 B 应改为
以上一题不用抄题,只需写答案在答题纸上。
4、定义一个类 matadd,其中数据成员为一个 M*N 的矩阵(即二维数组),其中 M 和 N 是两个预先定义的符号常数或常变量。通过重载运算符“+”和“=”,实现矩阵相加和赋值运算。例如定义矩阵A = [ 12 34 5 6 ]和 B = [2 2 23 3 3 ],通过运算 C=A+B,得到结果矩阵C = [ 34 57 8 9 ]。
具体要求如下:
(1)私有数据成员:int a[M][N],存放二维数组的值(2)公有成员函数:
matadd():缺省构造函数,初始化数据成员 a[M][N]为 0。
matadd(int x[M][N]):构造函数,用 x 初始化数据成员 a。
matadd operator +(matadd &A, matadd &B):重载加法运算符“+”,实现两个矩阵相加(要求为友元函数)
void operator =(matadd &B):重载赋值运算符“=”,实现两个矩阵赋值(要求为成员函数)
void show():按二维方式输出 a 数组。
(3)在主函数中完成对该类的测试。注意:在程序的开头,定义符号常数或常变量 M 和 N 的值分别为 2 和 3,表示二维数组的行数和列数。在主函数中定义整型数组 a[M][N]和 b[M][N],它们的初值可取上述示例值。定义三个matadd 类的对象 A、B 和 C,并用数组 a 和 b 初始化对象 A 和 B。将 A 加B 后赋值给 C。然后输出对象 C 的数据成员 a 矩阵的值。
实 验 过 程(算法、源代码以及注释)
实 验 结 果(记录程序执行的结果,分析结果)
实 验 总 结(记录程序在调试过程中出现的问题以及解决方法、总结收获和心得)
第二篇:C++实验报告
姓名:XX 学院:XXX 班级:XXX 学号:XXX
i++;
} while(i<=10);cout<<“sum=”< #include for(i;i<=10,i++) { sum+=i; } cout<<“sum=”< cout<<“不是合法的输入”< 实验 三、函数的应用(2学时) 1、实验目的: 掌握函数的定义和调用方法。练习重载函数使用。练习函数模板的使用 练习使用系统函数。 在main()函数中提示输入两个整数x,y,使用cin语句得到x,y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。程序名:lab3_4.cpp。 编写递归函数int fib(int n),在主程序中输入n的值,调用fib函数计算Fibonacci级数。公式为fib(n)=fib(n-1)+fib(n-2),n>2;fib(1)=fib(2)=1。使用if语句判断函数的出口,在程序中用cout语句输出提示信息。程序名:lab3_5.cpp。 7)调试操作步骤如下: 选择菜单命令Build|Start Debug |Step In,系统进入单步执行状态,程序开始运行,并出现一个DOS窗口,此时光标停在main()函数的入口处。 把光标移到语句answer=fib(n)前,从Debug菜单单击Run To Cursor,在程序运行的DOS窗口中按提示输入数字10,这时回到可视界面中,光标停在第11行,观察一下n的值。 从Debug菜单中单击Step Into,程序进入fib函数,观察一下n的值,把光标移到语句return(fib(n-2)+fib(n-1))前,从Debug菜单单击Run to Cursor,再单击Step Into,程序递归调用fib函数,又进入fib函数,观察n的值。 继续执行程序,参照上述的方法,观察程序的执行顺序,加深对函数调用和递归调用的理解。 再试试Debug菜单栏中的别的菜单项,熟悉Debug的各种方法。 4、实验原理 C++中函数的重载使得同样的函数名下,只要参数类型、数目不同时,即可根据输入的数据进行相应的函数调用,使用起来简单方便。 5、思考与体会 C++中,函数的运用与之前学过的C语言既有相同之处,也有着不同的地方。相同的地方在于格式、用法等框架上的不变。但是C语言中对于同样的函数名是只能够申明一种函数的,倘若有相同的函数名出现系统即会报错,所以用起来有时是极为不便 0 //参数为两个双精度浮点形的函数 int max1(double a,double b){ a=a>b?a:b;return a;} //参数为三个双精度浮点形的函数 int max1(double a,double b,double c){ a=a>b?a:b;a=a>c?a:c;return a;} void main(void){ int a;double b;a=max1(1,2);cout< Lab3_3: #include int main(){ int i,j,k;cout<<“请输入要比较的3个数: ”< 2131415 public: Rank rank;int frequency;float voltage;CPU(Rank r,int f,float v){ //构造函数 cout<<“构造了一个CPU”< rank=r; frequency=f; voltage=v;} void run(){ cout<<“CPU开始运行”< } void stop(){ cout<<“CPU停止运行”< cout<<“RANK=”< cout<<“frequency=”< cout<<“voltage=”< }; int main(){ CPU cpu(p5,500,2000);cpu.run();cpu.show();cpu.stop();return 0;} Lab4_2 #include //析构函数-17 computer(Rank r,int f,float v){ CPU cpu(r,f,v); //定义CPU对象 RAM ram(1); //定义RAM对象 CDROM cdrom(1); //定义CDROM对象 cpu.run(); cpu.show(); cpu.stop();} };int main(){ computer com(p4,300,3000);return 0;} 实验 七、继承与派生(一、二)4学时 1、实验目的: 学习定义和使用类的继承关系,定义派生类。熟悉不同继承方式下对基类成员的访问控制。学习利用虚基类解决二义性问题 2、实验任务 a)定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。b)定义一个基类BaseClass,有整型成员变量Number ,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。c)定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车类有高度(height)等属性,汽车类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。 3、实验步骤 编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示: error C2248:’age’:cannot access private member declared in class ‘Animal’ error C2248:’age’:cannot access private member declared in class ‘Animal’ 把age改为公有成员变量后重新编译就可以了。程序名为:lab7_1.cpp 0 确方便我们编程。 6、部分参考代码 Lab7_1 #include class Animal{ public: int age;}; class dog:public Animal{ public: int SetAge(int n){ age=n; return age;} }; void main(void){ int age;dog d;age=d.SetAge(3);cout<<“age=”< Lab7_2 #include cout<<“这是父类的构造函数”< cout<<“这是父类的析构函数”< //Motorcycle继承bicycle和motorcar类 class motorcycle:public bicycle,public motorcar{ public: motorcycle(int seat,double H,double MS,double W){ SeatNum=seat; height=H; MaxSpeed=MS; Weight=W;} void show(){ cout<<“seatnum=”< cout<<“height=”< cout<<“MaxSpeed=”< cout<<“weight=”< int main(){ motorcycle che(3,30.33,90.84,500);che.show();return 0;} 实验 八、多态性2学时 1、实验目的: 掌握运算符重载的方法 习使用虚函数实现动态多态性。 2、实验任务 a)定义Point类,有坐标x,y两个成员变量;对Point类重载“++”、“--”运算符,实现对坐标值的改变。 定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函的作用。 3、实验步骤 编写程序定义Point类,在类中定义整型的私有成员变量x,y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载“++”运算符,定义成函数Point& operator –();Point operator 也就是函数的重载。 6、部分参考代码 Lab8_1 #include class Point{ public: Point(double x=0.0,double y=0.0):xray(x),yray(y){} Point operator++(int);Point operator--(int);void show();private: double xray;double yray;}; Point Point::operator++(int){ return Point(xray++,yray++);} Point Point::operator--(int){ return Point(xray--,yray--);} void Point::show(){ cout<<“x坐标为”< int main(){ Point p(4.5,6.5);cout<<“进行运算前的情况:”< show(&v);return 0;} 信息工程系课程实验报告 姓 名 学 号 实验学时 2 实验时间 2017 年 12 月 1 日 实验地点 指导教师 课程名称 C++程序设计 专 业班 级 成绩 实验项目 类和对象(构造函数、析构函数、组合类、友元) 实 验 目 的 1、理解类的概念;2、掌握声明类的方法; 3、掌握对象的定义和初始化 4、掌握通过类编写程序 5、构造函数、析构函数 6、对象数组、对象引用、对象指针 7、组合类 8、静态成员 9、友元 实 验 内 容 和 要 求 1、阅读“程序 1.txt”,然后回答以下问题: 1)行 A 定义了一个类 Test 的对象,它将调用哪个构造函数? 2)行 A 能否写成 Test t1();? 为什么不可以或者可以? 3)行 B 定义了另一个对象,它将调用哪个构造函数? 4)解释第二个构造函数的函数体中用到 this 指针的原因:? 5)解释行 C 数组 p 的含义? 2、阅读“程序 2.txt”,然后回答以下问题: 1)行 A 中动态申请的数组为何还要将数组大小加 1? 2)String 类中是否还存在默认的构造函数“String();“? 3)行 B 开始的构造函数称之为 构造函数。解释其功能 4)执行行 C 时会调用哪个构造函数? 5)上机验证该程序。 3、阅读“程序 3.txt”,然后回答以下问题: 1)执行行 A 后,a1.c= a2.c= A::c= 2)执行行 B 后,a1.c= a2.c= A::c= 3)行 B 可否改为”A::c=400;” 为什么 4)c 为类 A 的私有成员,但行 D 中为何通过 t 能直接访问成员 c? 5)执行行 E 后,a1.c= a2.c= A::c= 第 1 题、第 2 题和第 3 题不用抄题目,只需写答案在报告纸上。 4、定义一个点类 Point,包括数据成员点的 x 坐标和 y 坐标(int)、构造函数以及设置点 x,y 坐标的成员函数。定义一个 CRect 类,代表一个矩形,要求 CRect 类中有代表矩形的左上角坐标(x1,y1)和右下角坐标(x2,y2)点类的对象(组合类),要求 CRect 类中有三个成员函数 RectHeight()、RectWidth()以及area(),通过这三个函数能得到矩形的高和宽和面积。 要求 CRect 类中有构造函数,要求 CRect 类中有成员函数 SetR(),通过这函数能设置矩形的左上角坐标和右下角坐标。 5、建立一个类 primenum,求指定数据范围内的所有质数。具体要求如下: 1)私有数据成员 int data[25] 依次存放指定范围内求出的所有质数 int low,high 存放指定的数据范围的下限和上限 int num 存放 low 与 high 之间的质数的个数 2)公有成员函数 primenum(int low,int high) 构造函数,初始化 low 和 high,同时在函数体内初始化 num 为 0 int isprime(int x) 判断 x 是否为质数。若是质数,返回 1;否则,返回 0.void process() 求指定范围内的所有质数,把它们依次存放在数组 data,并将求出的质数个数存放在 num 中 void print() 输出求出的质数个数以及所有质数,要求每行输出 5 个质数。 3)在主函数中对该类进行测试。例如:定义一个 primenum 类的对象 test,指定查找范围为 100~200,求出 100~200 之间的所有质数。 实 验 过 程(算法、源代码以及注释) 实 验 结 果(记录程序执行的结果,分析结果) 实 验 总 结(记录程序在调试过程中出现的问题以及解决方法、总结收获和心得) C++课程设计报告 设计题目: 学 院: 专业班级: 学生姓名: 学生学号: 指导教师: 计算机技术与科学 3班 樊冠男 40912140 马军亮 提交时间: 2011/1/12 成绩: 目录 C++课程设计报告 第一章 引言 C++课程设计报告 第二章 概要设计 C++课程设计报告 第三章 软件实现 C++课程设计报告 第四章 结果与讨论 第二次上机实验报告 姓名:王小宁 班级: 学号: 031012 1234 第一题: 题目: 编写一个类,声明一个数据成员和一个静态数据成员,其构造函数初始化数据成员,并把静态数据成员加1,其析构函数把静态数据成员减1.(1)编写一个应用程序,创建该类的3个对象,然后显示其数据成员和静态数据成员,再析构每个对象,并显示它们对静态数据成员的影响。 (2)修改该类,增加静态成员函数并访问静态数据成员,并声明静态数据成员为保护成员。体会静态成员函数的使用,静态成员之间与非静态成员之间互访问题。 编程思想: 首先,定义一个类,其中含有两个类的私有变量,一个静态数据变量,定义构造函数,将初值赋给两个私有变量,并将静态数据变量加1,并显示.定义一个析构函数,并通过析构函数将静态成员变量减1.并显示。 修改以上的类,增加一个静态成员函数并通过静态成员函数来访问静态成员变量。在主函数中利用一个指向函数的指针指向这个静态成员函数,并通过这个指针来访问类中的静态数据。代码实现: 代码1: #include static int count; A(int a=0,int b=0) { X=a; Y=b; count++; cout<<“startcount=”< count--; cout<<“overcount=”< int GetX(){return X;} int GetY(){return Y;} private: int X,Y;};int A::count=0;int main(){ int *countp=&A::count;A z(2,3);cout<<“x=”< cout<<“x=”< 问题及心得: 在这次试验中,我理解了静态变量与普通变量之间的差异与联系。在实验过程中因未初静态变量始化而无法通过编译,并且注意到静态变量一定要在类外初始化。 题目2: 创建一个Person类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。其功能有修改姓名、显示数据信息。要求其功能函数的原型放在类定义中,构造函数初始化每个成员,显示信息函数要求把对象中的完整信息打印出来。其中数据成员为保护的,函数为公有的。 编程思想: 创建一个PERSON类,定义姓名、街道地址、市、省和邮政编码分别为CHAR型的指针私有型变量。在定义公有型的构造函数,并在构造函数中申请动态内存来保存初始化的内容,并用相应的私有性的指针变量指向,再利用复制函数则指针中将会存放入输入内容。定义公有的析构函数释放动态申请的空间。定义一个公有的改变函数改变其中一个变量,方法与构造函数相似。 代码实现: #include private: char *name;char *street;char *pro;char *city;char *code; public: Person(char *aname,char *astreet,char *apro,char *acity,char *acode){ name=new char[strlen(aname)+1]; strcpy(name,aname); street=new char[strlen(astreet)+1]; strcpy(street,astreet); pro=new char[strlen(apro)+1]; strcpy(pro,apro); city=new char[strlen(acity)+1]; strcpy(city,acity); code=new char[strlen(acode)+1]; strcpy(code,acode); cout<<“constructor”< delete[] name; delete[] street; delete[] pro; delete[] city; delete[] code; cout<<“destructor”< delete[] name; name=new char[strlen(aname)+1]; strcpy(name,aname);} void show(){ cout<<“姓名:”< cout<<“街道地址:”< cout<<“省份:”< cout<<“城市:”< cout<<“邮政编码:”< 运行结果: 实验心得: 通过这个实验,我们学会了对类的私有的字符数组变量的初始化。利用指针动态分配空间。第三篇:信息系C++实验报告(实验8)
第四篇:C++课程设计实验报告(范文)
第五篇:C++上机实验报告