东北大学c++实验报告
东北大学C++实验报告2

运行结果:
2.
编写重载函数Max1可分别求两个整数,三个整数,两个双精度数,三个双精度数的最大值。
分别编写四个同名函数max1,实现函数重载,在main()函数中测试函数功能。程序名:lab3_2.cpp
源代码:
#include<iostream>
using namespace std;
int max(int a,int b)
}
}
运行结果:
思考题
1.如何利用系统函数来实现一些常用的功能?
使用之前首先包含头文件,然后在代码中直接使用。
2.如何查找系统函数?
上网查找或者翻阅书籍。
3.如何实现函数重载?
改变参数的类型或者改变参数的个数
4.如何编写一个递归程序?
找到函数的递归规律,并在结束时加上结束条件。
2.编写重载函数Max1可分别求两个整数,三个整数,两个双精度数,三个双精度数的最大值。
3.使用系统函数pow(x,y)计算xy的值,注意包含头文件math.h
4.用递归的方法编写函数求Fibonacci级数,观察递归调用的过程
三、实验内容
1.
编写一个函数把华氏温度转换为摄氏温度,转换公式如下C=(F-32)*5/9
return 0;
}
运行结果:
4.
用递归的方法编写函数求Fibonacci级数,观察递归调用的过程
编写递归函数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
东北大学 c++实验报告 exercise6

Exercise 6 数组、指针与字符串班级:计算机1102班姓名:xxx学号:2011xxxx1实验目的(1)学习使用数组。
(2)学习字符串数据的组织和处理。
(3)学习标准C++库的使用。
(4)掌握指针的使用方法。
(5)练习通过Debug观察指针的内容及其所指的对象的内容(6)联系通过动态内存分配实现动态数组,并体会指针在其中的作用。
(7)分别使用字符数组和标准C++库练习处理字符串的方法。
2 实验要求(1)编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。
(2)使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。
(3)编程实现两字符串的连接。
要求使用字符数组保存字符串,不要使用系统函数。
(4)使用string类定义字符串对象,重新实现上一小题。
(5)定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。
Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。
实现并测试这个类。
(6)定义包含5个元素的对象数组,每个元素都是Employee类型的对象。
(7)(选做)修改实验4中的选做实验中的people(人员)类。
具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。
其中“出生日期”定义为一个“日期”类内嵌对象。
用成员函数实现对人员信息的录入和显示。
要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。
在测试程序中定义people类的对象数组,录入数据并显示。
3 程序代码及截图(1)矩阵转置1:代码:#include<iostream>using namespace std;void zhuanzhi(int array[3][3]);int main(){int array1[3][3];int i,j;cout<<"请输入一个3*3的矩阵,矩阵元素以空格分开:"<<endl;for(i=0;i<=2;i++){for(j=0;j<=2;j++){cin>>array1[i][j];}};cout<<"您所输入的矩阵为:"<<endl;for(j=0;j<=2;j++){ or(i=0;i<=2;i++){cout<<array1[j][i]<<ends;}cout<<endl;}zhuanzhi(array1);return 0;}void zhuanzhi(int array[3][3]){int i,j;int array2[3][3];for(i=0;i<=2;i++){for(j=0;j<=2;j++){array2[j][i]=array[i][j];}}cout<<"转置后的矩阵为:"<<endl;for(j=0;j<=2;j++){for(i=0;i<=2;i++){cout<<array2[j][i]<<ends;} cout<<endl;}}程序截图:(2)矩阵转置2:#include<iostream>using namespace std;void zhuanzhi(int *b){int i,j,t;for(i=0;i<3;i++){for(j=0;j<3;j++){t=*(b+i*3+j);*(b+i*3+j)=*(b+j*3+i);*(b+j*3+i)=t;}}}void main()int i,j;int *a=new int[3*3];cout<<"请输入一个3*3矩阵,矩阵元素用空格分开:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++){cin>>a[i*3+j];}}cout<<"输入的矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++)cout<<a[i*3+j]<<" ";cout<<endl;}zhuanzhi(a);cout<<"转置后的矩阵是:"<<endl;for(j=0;j<3;j++){for(i=0;i<3;i++)cout<<a[i*3+j]<<" ";cout<<endl;}}程序截图:(3)字符串连接:①程序代码:#include<iostream>using namespace std;void main(){ char a[100],b[100],c[200];int i,j;cout<<"请输入两个字符串:";cin>>a;cin>>b;cout<<"两字符串连接后为:"<<endl;for(i=0;a[i]!='\0';i++)c[i]=a[i];for(j=0;b[j]!='\0';j++){c[i]=b[j];i++;}c[i]='\0';cout<<c<<endl;}②程序截图:(4)字符串连接2:①程序代码:#include<iostream>#include<string>using namespace std;void main(){string a,b,c;cout<<"请输入两个字符串:";cin>>a>>b;cout<<"这两个字符串连接后为:"; c=a+b;cout<<c<<endl;}程序截图:。
东北大学编译原理实验1

编译原理程序设计实验报告——实验题目班级:计算机1507班姓名:罗艺博学号:一、实验目标:词法分析扫描器的设计实现。
在程序源文件中输入类C 语言程序源文件,设计词法分析扫描器,并以TOKEN类别码序列的形式输出扫描结果。
二、实验内容:1.概要设计:将程序大致分为:主函数、识别器(有限自动机state_change)、词法分析器(state_to_code)三大部分。
其中,主函数所完成的功能为:打开、读取、关闭文件(即C语言源程序),重置token串等。
识别器的功能为:识别字符,完成token串的生成,判断词法错误等。
词法分析器的功能为:生成token类别码,判断token 是否出错等。
主函数、识别器、词法分析器关系图2.流程图词法分析扫描器流程图3.关键函数a. 识别器(有限自动机state_change)int state_change(state,ch) 词法分析器(state_to_code)int state_to_code(state_before,token)断函数int IsAlpha(char c) n");exit(1);}while((ch = fgetc(fp)) != '#'){state_before = state;state = state_change(state,ch);if(state == -1) {printf(" Err! Stupid man!\n");}else if (state != 0){token[i++] = ch;}else{if(state_before != 1) {state_to_code(state_before,token);}memset(token,0,10);i = 0;state = 1;}}fclose(fp);return 0;}int state_change(state,ch) //判断是否为CT中的小数点 {if(state == 3)return 4;elsereturn -1;}else if(ch == '\'') //判断是否为CT字符 {if(state == 1)return 7;else if(state == 6) //考虑与PT相连的情况state_to_code(state_before,token);i = 0;memset(token,0,10);return 7;}else if(state == 8)return 9;elsereturn -1;}else if(ch == '\"') //判断是否为ST {if(state == 1)return 10;else if(state == 6) //考虑与PT相连的情况 {state_to_code(state_before,token);i = 0;memset(token,0,10);return 10;}else if(state == 11)return 12;elsereturn -1;}else //判断是否为PT {if(state == 1)return 6;else if(state == 2) //考虑与IT,KT相连的情况 {state_to_code(state_before,token);i = 0;memset(token,0,10);return 6;}else if(state == 3) //考虑与CT相连的情况 {state_to_code(state_before,token);i = 0;memset(token,0,10);return 6;else if(state == 9) //考虑与CT字符相连的情况 {state_to_code(state_before,token);i = 0;memset(token,0,10);return 6;}else if(state == 12) //考虑与ST相连的情况 {state_to_code(state_before,token);i = 0;memset(token,0,10);return 6;}else if(state == 6){if(((i == 1)&&(ch == '='))&&((token[0] == '>')||(token[0] == '<')||(token[0] == '='))){return 6;}elsereturn 0;}elsereturn -1;}}int state_to_code(state_before,token) //词法分析器{int n; //循环code1 = 0;code2 = 0;switch(state_before){case 2://KT <1 X>for(n=0; n<6; n++) {if(strcmp(token, KT[n]) == 0){code1 = 1;code2 = n;printf("<%d %d>\n",code1,code2); //why改变不了全局的code1,code2break;}}if(code1 == 0) //IT <2 0> {printf("<2 0>\n");}break;case 3://CT <3 0>printf("<3 0>\n");break;case 5: //CT(小数) <3 0> printf("<3 0>\n");break;case 6: //PT <6 X> for(n=0; n<18; n++){if(strcmp(token, PT[n]) == 0){code1 = 6;code2 = n;printf("<%d %d>\n",code1,code2); //why改变不了全局的code1,code2break;}}break;case 9://CT字符 <4 0>printf("<4 0>\n");break;case 12: //ST <5 0> printf("<5 0>\n");break;default : //不被任何词识别 printf("Sorry it's going wrong!");}return 0;}int IsAlpha(char c) //判断是否为字母{if(((c>='a')&&(c<='z')) || ((c>='A')&&(c<='Z')))return 1;elsereturn 0;}int IsNum(char c) //判断是否为数字{if(c>='0'&&c<='9')return 1;elsereturn 0;}int IsKey(char *word) //判断是否为关键字{int m,n;for(n=0; n<6; n++){if((m = strcmp(word, KT[n])) == 0){if(n == 0)return 2;return 1;}}return 0;}int IsDelimiter(char *token) //判断是否为界符{int m,n;for(n=0; n<18; n++){if((m = strcmp(token, PT[n])) == 0){if(n == 0)return 2;return 1;}}return 0;}程序运行结果:(截屏)输入:输出:。
c语言实验报告5篇

c语言实验报告c语言实验报告5篇随着社会一步步向前发展,我们使用报告的情况越来越多,我们在写报告的时候要注意涵盖报告的基本要素。
其实写报告并没有想象中那么难,以下是小编收集整理的c语言实验报告,欢迎阅读与收藏。
c语言实验报告1学号:__________ 姓名:__________ 班级:__________ 日期:__________指导教师:__________ 成绩:__________实验六综合实验一、实验目的1、掌握C语言中的变量、数组、函数、指针、结构体等主要知识点。
2、掌握C程序的结构化程序设计方法,能使用C语言开发简单的应用程序。
3、掌握C程序的运行、调试方法等。
二、实验内容编写一个学生信息排序程序。
要求:1、程序运行时可输入n个学生的信息和成绩(n预先定义)。
2、学生信息包括:学号、英文姓名、年龄;学生成绩包括:语文、数学、计算机。
3、给出一个排序选择列表,能够按照上述所列信息(学号、姓名、年龄、语文、数学、计算机)中的至少一个字段进行排序,并显示其结果。
1、使用函数方法定义各个模块。
三、实验步骤与过程物理实验报告·化学实验报告·生物实验报告·实验报告格式·实验报告模板四、程序调试记录c语言实验报告2第一章基础掌握1.1 实验目的掌握C程序设计编程环境Visual C++,掌握运行一个C程序的基本步骤,包括编辑、编译、链接和运行。
(]1.2 实验要求在报告中记录建立、保存C程序实习过程。
1.3 实验基本内容编写程序,在屏幕上显示一个短句“Hello World”(1)程序:1)编译如下程序:#includeVoid main(){printf (“Hello World! ”);}2)链接。
执行Build-命令。
3)运行。
执行Build Execute 命令。
显示结果。
4)关闭程序工作区。
(2)运行结果:输出结果:Hello World!总结:掌握C语言程序设计的基本框架,能够编写简单的程序。
东北大学C++实验报告6

实验六1.实验要求(1)定义Point类,有坐标_x,_y两个成员变量;对Point类重载“++”(自增)、“――”(自减)运算符,实现对坐标值的改变。
(2)定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。
观察虚函数的作用。
2. 实验内容及实验步骤(1) 编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point&operator--();Point operator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。
程序名:1ab8_1.cpp。
(2) 编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。
在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。
再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。
程序名:lab8_2.cpp。
3. 源程序Lab8_1#include<iostream>using namespace std;class Point{public:Point(int X,int Y): _x(X),_y(Y){}Point operator++();Point operator++(int);Point operator--();Point operator--(int);void Putout() const;private:int _x,_y;};void Point::Putout() const{cout<<"("<<_x<<","<<_y<<")"<<endl; }Point Point:: operator++(){_x++;_y++;return *this;}Point Point::operator++(int){++_x;++_y;return *this;}Point Point::operator--(){_x--;_y--;return *this;}Point Point::operator--(int){--_x;--_y;return *this;}int main(){Point A(6,7);cout<<"Point++: ";(A++).Putout();cout<<"++Point: ";(++A).Putout();cout<<"Point--: ";(A--).Putout();cout<<"--Point: ";(--A).Putout();return 0;}运行结果Lab8_21)在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数。
c语言大实验报告

c语言大实验报告C 语言大实验报告一、实验目的本次 C 语言大实验的主要目的是通过实际的编程项目,深入巩固和应用 C 语言的基础知识,提高编程能力和解决实际问题的能力。
具体而言,包括熟练掌握数据类型、控制结构、函数、数组、指针等核心概念,并能够运用它们构建较为复杂的程序逻辑。
二、实验要求1、完成一个具有一定规模和功能的 C 语言程序,例如学生成绩管理系统、图书管理系统等。
2、程序应具备良好的代码结构和可读性,遵循编程规范。
3、实现数据的输入、处理和输出功能,能够进行数据的存储和查询。
4、对程序进行充分的测试,确保其稳定性和正确性。
三、实验环境1、操作系统:Windows 102、编程工具:Visual Studio 2019四、实验内容本次实验我选择开发一个学生成绩管理系统,该系统能够实现学生成绩的录入、查询、修改、删除以及成绩统计分析等功能。
(一)数据结构设计为了存储学生的信息,我定义了一个结构体`Student` ,包含学生的学号、姓名、各科成绩等字段:```ctypedef struct {int id;char name50;float score3; //假设存储三门课程的成绩} Student;```同时,使用一个动态数组来存储多个学生的信息:```cStudent students;int numStudents = 0; //记录学生数量```(二)功能模块实现1、成绩录入通过循环让用户输入学生的信息,包括学号、姓名和各科成绩,并将其添加到动态数组中:```cvoid inputStudent(){Student newStudent;printf("请输入学号:");scanf("%d",&newStudentid);printf("请输入姓名:");scanf("%s", newStudentname);printf("请输入三门课程的成绩:");for (int i = 0; i < 3; i++){scanf("%f",&newStudentscorei);}students =(Student )realloc(students, (numStudents + 1) sizeof(Student));studentsnumStudents++= newStudent;}```2、成绩查询根据用户输入的学号,在动态数组中查找对应的学生信息并输出:```cvoid queryStudent(){int id;printf("请输入要查询的学号:");scanf("%d",&id);for (int i = 0; i < numStudents; i++){if (studentsiid == id) {printf("学号:%d\n", studentsiid);printf("姓名:%s\n", studentsiname);printf("成绩:");for (int j = 0; j < 3; j++){printf("%2f ", studentsiscorej);}printf("\n");return;}printf("未找到该学号的学生信息!\n");}```3、成绩修改先查询要修改的学生信息,然后让用户输入修改后的成绩:```cvoid modifyStudent(){int id;printf("请输入要修改的学号:");scanf("%d",&id);for (int i = 0; i < numStudents; i++){if (studentsiid == id) {printf("请输入修改后的三门课程成绩:");for (int j = 0; j < 3; j++){scanf("%f",&studentsiscorej);printf("修改成功!\n");return;}}printf("未找到该学号的学生信息!\n");}```4、成绩删除根据学号删除指定的学生信息,并重新调整动态数组:```cvoid deleteStudent(){int id;printf("请输入要删除的学号:");scanf("%d",&id);int found = 0;for (int i = 0; i < numStudents; i++){if (studentsiid == id) {found = 1;for (int j = i; j < numStudents 1; j++){studentsj = studentsj + 1;}numStudents;students =(Student )realloc(students, numStudents sizeof(Student));printf("删除成功!\n");return;}}if (!found) {printf("未找到该学号的学生信息!\n");}}```5、成绩统计分析计算所有学生的平均成绩,并输出最高和最低成绩:```cvoid statistics(){float totalScore = 0;float maxScore = students0score0;float minScore = students0score0;for (int i = 0; i < numStudents; i++){float sum = 0;for (int j = 0; j < 3; j++){sum += studentsiscorej;}totalScore += sum / 3;if (sum / 3 > maxScore) {maxScore = sum / 3;}if (sum / 3 < minScore) {minScore = sum / 3;}}printf("平均成绩:%2f\n", totalScore / numStudents);printf("最高成绩:%2f\n", maxScore);printf("最低成绩:%2f\n", minScore);}```(三)主函数在主函数中,通过菜单的方式让用户选择要执行的操作:```cint main(){int choice;while (1) {printf("1、录入成绩\n");printf("2、查询成绩\n");printf("3、修改成绩\n");printf("4、删除成绩\n");printf("5、成绩统计分析\n");printf("6、退出\n");printf("请选择操作:");scanf("%d",&choice);switch (choice) {case 1:inputStudent();break;case 2:queryStudent();break;case 3:modifyStudent();break;case 4:deleteStudent();break;case 5:statistics();break;case 6:free(students);return 0;default:printf("无效的选择,请重新输入!\n");}}return 0;}```五、实验结果经过多次测试,本系统能够稳定运行,实现了预期的各项功能。
(完整版)c实验报告

(完整版)c实验报告实验名称: C语言实验报告实验内容:本次实验主要针对C语言编程进行实验。
通过实验的设计和完成,检验和加深对C语言的理解和应用能力。
实验步骤:1. 实验准备在开始实验之前,需要准备好以下必要的工具和材料:- 计算机- C语言编译器(比如GCC、Clang等)- 文本编辑器(比如Notepad++、Sublime Text等)2. 实验环境搭建在计算机上安装C语言编译器,并配置好相应的环境变量。
这样可以在终端或命令提示符中执行相关的C程序。
3. 编写实验代码根据实验要求,使用文本编辑器编写C语言代码。
根据实验的要求和功能需求,合理设计和组织代码结构,包括头文件的引用、变量的定义、函数的声明和定义等。
4. 编译和运行代码在命令行或终端中使用编译器对编写好的C语言代码进行编译,并生成可执行文件。
编译命令的具体格式根据不同的编译器而有所差异,但一般形式如下:```gcc -o output_file input_file.c```其中,"output_file"表示生成的可执行文件名,"input_file.c"表示待编译的C源代码文件名。
编译成功后,通过命令行或终端执行生成的可执行文件,检查程序的运行结果是否符合预期。
5. 实验结果分析根据实际运行结果,对实验数据进行分析和归纳。
可以通过输出结果、打印特定信息或观察程序的行为来判断程序是否正确地实现了预期的功能。
6. 实验总结在实验报告中对本次实验的过程、方法、结果进行总结,并提出实验中遇到的问题和解决方法。
同时,对所学习的C语言相关知识点进行总结和归纳,以加深对相关知识的理解和记忆。
实验结果:通过本次实验的设计和实现,我成功完成了对C语言编程的实验,达到了预期的目标。
通过编写实际的代码,我巩固了对C语言语法和基本概念的理解。
在实验过程中,我遇到了一些问题,通过查阅资料和与同学的讨论,我成功解决了这些问题。
c语言实习报告3篇

c语言实习报告3篇c语言实习报告1在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。
在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。
由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。
包括了程序模块处理.简单界面程序.高级界面程序.程序的添加修改.用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。
上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。
对于程序设计语言的.学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。
因为学时所限,课程不能安排过多的上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。
为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。
课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:1.加深对课堂讲授内容的理解课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用c语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六
1•实验要求
(1)定义Point类,有坐标_x, _y两个成员变量;对Point类重载牛+ ”(自增)、“一-(自减)运算符,实现对坐标值的改变。
(2)定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。
观察虚函数的作用。
2.实验容及实验步骤
(1)编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point& operato叶+() ; Point operato叶+(int);以实现对Point 类重载++ ”(自增)运算符,定义成员函数Point& operator ------------------------------ ();Point operator -------- (int);以实现对Point类重载(自减)运算符,实现对坐标值的改变。
程序名:1ab8_1. cpp。
⑵编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派
生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。
在main()函数中定义vehicle、bicycle、motorcar、motorcycle 的对象,调用其Run()、Stop()函数,观察其执行情况。
再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。
程序名:lab8_2. cpp。
3.源程序
Lab8 1
#in clude<iostream> using n amespace std;
class Poi nt{
public:
Poi nt(i nt X,i nt Y): _x(X),_y(Y){}
Point operator++();
Point operator++(i nt);
Point operator--。
;
Point operator--。
nt);
void Putout() con st;
private:
int _x,_y;
};
void Poin t::Putout() con st{ coutvv"("vv_xvv","vv_yvv")"v<e ndl;
}
Point Poin t:: operator++(){
_x++;
_y++;
return *this;
Point Poin t::operator++(i nt){
++_x;++_y;
return *this;
}
Point Poin t::operator--(){
_x--;
_y--;
return *this;
}
Point Poi nt::operator--(i nt){
--_x;
--_y;
return *this;
}
int mai n(){
Poi nt A(6,7); cout<<" "Poi nt++:
(A++).Putout(); cout<<"++Poi nt:
(++A).Putout();
cout<<"Poi nt--:"
(A--).Putout(); cout«"--Poi nt:" (--A).Putout(); return 0; }
class bicycle :public Vehicle
{ 运行结果
Lab8_2
1) 在 main()函数中定义 vehicle 、bicycle 、motorcar 、motorcycle 的对象,调用 其 Run()、
Stop()函数。
#in clude<iostream> using n amespace std;
class Vehicle{
public:
void Run(){cout<<"基类 Vehicle 的 Run 函数调用"<<endl;}
void Stop(){cout<<"基类 Vehicle 的 Stop 函数调用
"<<endl;} };
public:
void Run(){cout<<"派生类bicycle 的Run 函数调用"<<endl;}
void Stop(){cout<<"派生类bicycle 的Stop 函数调用"<<endl;} };
class motorcar :public Vehicle
{
public:
void Run(){cout<<"派生类motorcar 的Run 函数调用"<<endl;} void Stop(){cout<<"派生类motorcar 的Stop 函数调用"<<endl;} };
class motorcycle :public bicycle,public motorcar
{
public:
void Run(){cout<<"派生类motorcycle 的Run 函数调用"<<endl;} void Stop(){cout<<"派生类motorcycle 的Stop 函数调用"<<endl;} };
int mai n(){
Vehicle V;
bicycle B;
motorcar M;
V.Ru n(); V.Stop();
motorcycle Mc;
class bicycle :virtual public Vehicle
{ B.R un (); B.Stop();
M.Ru n(); M.Stop();
Mc.R un(); Mc.Stop();
return 0;
}
运行结果
2)用vehicle 类型的指针来调用这几个对象的成员函数
#in clude<iostream> using n amespace std;
class Vehicle{
public:
virtual void Run(){cout<<"基类 Vehicle 的 Run 函数调用"<<endl;}
virtual void Stop(){cout<<"基类 Vehicle 的 Stop 函数调用
"<<endl;} };
public:
void Run(){cout<<"派生类bicycle 的Run 函数调用"<<endl;}
void Stop(){cout<<"派生类bicycle 的Stop 函数调用"<<endl;} };
class motorcar :virtual public Vehicle
{
public:
void Run(){cout<<"派生类motorcar 的Run 函数调用"<<endl;} void Stop(){cout<<"派生类motorcar 的Stop 函数调用"<<endl;} };
class motorcycle :public bicycle,public motorcar
{
public:
void Run(){cout<<"派生类motorcycle 的Run 函数调用"<<endl;} void Stop(){cout<<"派生类motorcycle 的Stop 函数调用"<<endl;} };
void fun( Vehicle *p){
p->Ru n();
p->Stop();
}
int mai n(){
Vehicle V;
bicycle B;
motorcar M; motorcycle Me; fun(&V);
fun(&B);
fun(&M);
fun(&Me);
return 0;
}
运行结果
4•思考题
(1).函数类型operator运算符(形参表)
{
函数体;
}
(2). friend函数类型operator运算符(形参表)
函数体;
}
⑶通过指向基类类型的指针和引用来调用对象的虚函数来实现。