![面向对象C++实验报告手册_第1页](http://file4.renrendoc.com/view/2968c30d6afbec0b5b028b75711abae8/2968c30d6afbec0b5b028b75711abae81.gif)
![面向对象C++实验报告手册_第2页](http://file4.renrendoc.com/view/2968c30d6afbec0b5b028b75711abae8/2968c30d6afbec0b5b028b75711abae82.gif)
![面向对象C++实验报告手册_第3页](http://file4.renrendoc.com/view/2968c30d6afbec0b5b028b75711abae8/2968c30d6afbec0b5b028b75711abae83.gif)
![面向对象C++实验报告手册_第4页](http://file4.renrendoc.com/view/2968c30d6afbec0b5b028b75711abae8/2968c30d6afbec0b5b028b75711abae84.gif)
![面向对象C++实验报告手册_第5页](http://file4.renrendoc.com/view/2968c30d6afbec0b5b028b75711abae8/2968c30d6afbec0b5b028b75711abae85.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
创新源于实践《面向对象C++程序设计》课程实验教学手册姓名:姓名:任亚南学号:1101120103专业:计算机科学与技术班级:2012级1班任课教师:李梅莲时间:2013年6月14日综合成绩:许昌学院计算机科学与技术学院制实验手册使用及要求实验操作是教学过程中理论联系实际的重要环节,而实验报告的撰写又是知识系统化的吸收和升华过程,因此,实验报告应该体现完整性、规范性、正确性、有效性。现将实验报告撰写的有关内容说明如下:预习报告必须在实验前完成。实验前按实验要求手写程序或程序填空,并走查代码,有疑问处标记,上机时在C++集成开发环境下输入并调试手写程序,分析运行结果,如实填写实验过程及实验中存在的问题及解决办法。实验结束后填写通过后的源程序和对实验的总结。通过后的源程序可以手写也可以打印粘贴。实验情况一览表序号实验项目实验性质学时实验一C++基础练习设计性2实验二C++简单程序设计设计性2实验三类与对象(一)设计性4实验四类与对象(二)设计性4实验五运算符重载设计性4实验六派生与继承设计性4实验七虚函数与多态性设计性4实验八输入输出格式设计性2实验九文件设计性4实验十综合实验综合性6实验一实验名称:c++基础练习实验性质:设计性学时数:2成绩:一、实验目的熟悉使用VisualC++或VS2005等集成开发环境编写和实现C++程序过程掌握C++程序的基本格式与规范熟悉C++基本的输入输出操作理解作用域运算符的概念与基本使用方法new和delete运算符二、实验要求实验前预习教材第1章,事先按要求填充或编写好实验程序,上机调试和运行程序,分析实验中遇到的问题。三、实验所需器材与软件微型计算机;C++集成开发工具软件(VC++6.0、CFree、VS2005等)四、实验过程:设计源程序1:编写一个简单程序,输出“Welcomeyou”,并给程序加一行注释“Firstc++program”。#include<iostream>usingnamespacestd;intmain(){1)cout<<"Welcomeyou"<<endl;2)//firstc++program;return0;}实验结果设计源程序2:输入以下程序,如果有错误,请修改直到正确,分析运行结果。#include<iostream>usingnamespacestd;intmain(){inta,b,c;intadd(intx,inty);cout<<"请输入两个数:";cin>>a>>b;c=add(a,b);cout<<"a+b="<<c<<endl;return0;}intadd(intx,inty){intz;z=x+y;return(z);}实验结果设计源程序3:编写一个完整的包含输入和输出的简单C++程序。#include<iostream>usingnamespacestd;intmain(){#include<iostream>#include"iomanip"intmain(){usingnamespacestd;inta[3][3]; inti,j; cout<<"请输入九个数字:"; for(i=0;i<3;i++) { for(j=0;j<3;j++) { cin>>a[i][j]; } } cout<<"可形成矩阵:"<<endl; for(i=0;i<3;i++) { for(j=0;j<3;j++) { cout<<setw(4)<<a[i][j]; } cout<<endl; }return0;}实验结果设计源程序4:编写一个程序动态分配一个浮点空间,输入一个数到该空间中,计算以该数为半径的圆的面积并在屏幕上显示,最后释放该空间,请使用new,delete运算符。#include<iostream>usingnamespacestd;intmain(){double*r;(1)r=newdouble;cin>>*r;cout<<”Areais:”<<(2)3.14**r**r;(3)deleter;;return0;}实验结果五、实验总结:在c++中的输入输出的规则老是写反;对于这节的实验在完成动态分配内存代码编写时,具有一定的困难,通过参照课本和记忆还是记下了还是会把cout<<中的字符串的输出和变量的输出混淆比如:*p=10;cout<<”*p”;正确应为:*p=10;cout<<*p;实验二实验名称:c++简单程序设计练习实验性质:设计性学时数:2成绩:一、实验目的进一步熟悉在所用系统上编辑、编译、连接和运行C++程序的方法掌握C++对C的功能的补充和增强掌握简单的指针操作方式掌握函数模板及其声明方法。二、实验要求实验前预习教材第1章,事先按要求填充或编写好实验程序,上机调试和运行程序,分析实验中遇到的问题,熟悉常见错误提示信息,熟悉单步调试。三、实验所需器材与软件微型计算机;C++集成开发工具软件(VC++6.0、CFree、VS2005等)四、实验过程:设计源程序1:编写程序,要求使用带有默认参数的函数实现求任意两个整数的最大值。实验结果设计源程序2:编写程序,利用函数重载和函数模板分别实现对整型量、实型和长整型求绝对值。#include“iostream"usingnamespacestd;intmain() { intmyfabs(inta); doublemyfabs(doublea); longmyfabs(longa); inti,m; doublej,n; longk,p; cout<<"请输入一个整数:"; cin>>i;m=myfabs(i); cout<<"请输入一个数:"; cin>>j; n=myfabs(j); cout<<"请输入一个长整数:"; cin>>k; p=myfabs(k); cout<<m<<""<<n<<""<<p<<endl;return0;}intmyfabs(inta){ return(a>=0?a:-a);}doublemyfabs(doublea){ return(a>=0?a:-a);}longmyfabs(longa){ return(a>=0?a:-a);}实验结果程序填空:设计源程序3:读入9个双精度的数,把他们存放在一个存储块里,然后求出它们的积。使用动态分配和指针操作。#include<iostream>usingnamespacestd;constintSIZE=9;double*init(){returnnewdouble[SIZE];}voidreadin(double*a)//从a指向的存储单元开始读{inti;cout<<"\nplealseenter"<<SIZE<<"value:";for(i=0;i<SIZE;i++)(1)cin>>a[i];//读入数据到a+i指向的存储单元}//计算从arr指向的存储单元开始的连续size个存储单元的乘积voidproduct(double*arr,intsize,double*result){for(size--,*result=*(arr+size);--size>=0;*result*=*(arr+size));//乘积的结果放入result指向的存储单元}intmain(){double*x,res,*init();if((x=init())==NULL)return;(2)readin(x);product(x,SIZE,&res);cout<<"Theproductis:"<<res<<endl;(3)deletex;return0;}实验结果设计源程序4:分别利用指针和引用作为函数参数实现交换两个整型变量的值,写出主函数进行验证。//指针函数参数#include“iostream”usingnamespacestd;intmain(){voidswarp(int&p1,int&p2)inti,j;cout<<”请输入两个数:”;cin>>i;cin>>j;swarp(i,j);cout<<i<<”“<<j<<endl;}voidswarp(int&p1,int&p2){inttemp;temp=p1;p1=p2;p2=temp;}实验结果://引用作为函数参数#include“iostream"usingnamespacestd;voidswap(int&a,int&b){inttemp;temp=a;a=b;b=temp; }intmain(){inta,b;cout<<"请输入a,b值:";cin>>a>>b;swap(a,b);cout<<"交换后为:"<<a<<""<<b<<endl;return0;}实验结果:实验总结:实验三实验名称:类与对象(一)、实验性质:设计性学时数:4、实验成绩_____一、实验目的掌握类、类的数据成员、类的成员函数的定义方式理解类成员的访问控制方式掌握对象的定义和操作对象的方法理解构造函数和析构函数的定义与执行过程掌握重载构造函数的方法类声明和成员函数定义的分离二、实验要求实验前预习教材第2章,事先按要求填充或编写好实验程序,上机调试和运行程序,分析实验中遇到的问题。三、实验所需器材与软件微型计算机;C++集成开发工具软件(VC++6.0、CFree、VS等)四、实验过程:设计源程序1:声明一个时间类,时间类中有3个私有数据成(hour,minute,second)和两个公有成员函数(setTime和printTime),setTime根据传递的3个参数为对象设置时间;printTime负责将对象表示的时间显示输出。在主函数中,建立一个时间类的对象,设置时间为9点20分30秒并显示该时间。程序填空:#include<iostream>usingnamespacestd;classTime{public: voidsetTime(intc,intm,ints) { clock=c; minute=m; second=s; } voidprintTime() { cout<<clock<<":"<<minute<<":"<<second<<endl; }private: intclock,minute,second;};intmain(){ Timetime1;(1)time1.setTime(9,20,30);(2)time1.printTime();}实验结果:设计源程序2:2.使用构造函数代替上面的settime成员函数,并在主函数中使用构造函数设置时间为10点40分50秒,并显示该时间。#include<iostream>usingnamespacestd;classTime{public: Time(intc,intm,ints) {(1)clock=c;(2)minute=m;(3)second=s; } voidprint_Time() { cout<<clock<<":"<<minute<<":"<<second<<endl; }private: intclock,minute,second;};intmain(){ Timetime1((4)10,40,50); time1.print_Time();}实验结果:3.重载时间类的构造函数(不带参数)使小时,分,秒均为0。#include<iostream>usingnamespacestd;classTime{ public: Time() { clock=0; minute=0; second=0;} voidprint_Time(){ cout<<clock<<":"<<minute<<":"<<second<<endl;}private:intclock,minute,second;}; intmain(){Timetime1,time2;time1.print_Time();time2.print_Time(); return0;}实验结果:4.在时间类的析构函数中输出“Goodbye!”#include<iostream>usingnamespacestd;classTime{ public: Time() { clock=0; minute=0; second=0;} ~Time() { cout<<"goodbye!"<<endl;} voidprint_Time(){ cout<<clock<<":"<<minute<<":"<<second<<endl;}private:intclock,minute,second;}; intmain(){Timetime1,time2;time1.print_Time();time2.print_Time(); return0;}实验结果:5.综合以上程序1至程序4,声明一个完善的时间类,时间类中有时、分、秒3个私有数据成员、两个公有成员函数(setTime和print_time)、带参数和不带参数两个构造函数及一个析构函数。在主函数中,定义三个时间类的对象,分别采用setTime、带参构造、不带参构造来为其设置时间并显示各对象时间。此题要求类的定义与实现分离,即采用多文件编程方法。Time.h文件:usingnamespacestd;classTime{public:Time() { hour=0; min=0; sec=0; } Time(inth,intm,ints) { hour=h; min=m; sec=s; } voidsetTime(); voidprint_time();private: inthour; intmin; intsec;};time.cpp文件:#include“iostream"#include"Time.h"voidTime::setTime(){ cout<<"请输入时间时,分,秒:"; cin>>hour>>min>>sec;}voidTime::print_time(){ cout<<"现在时间为:"<<endl; cout<<hour<<":"<<min<<":"<<sec<<endl;}主函数:#include“iostream"#include"Time.h"usingnamespacestd;intmain(){ Timet1,t2,t3(10,10,10); t1.print_time(); t2.setTime(); t2.print_time(); t3.print_time(); return0;}实验结果:五、实验总结:实验四实验名称:类与对象(二)、实验性质:设计性学时数:4、实验成绩_____一、实验目的掌握对象数组定义与使用方法理解对象指针的概念,学会使用指针引用对象了解this指针的工作方式掌握静态数据成员和静态成员函数的基本使用方法理解友元与友元函数的作用,掌握其使用方法熟悉类模板的声明与使用方法二、实验要求实验前预习教材第3章,事先按要求填充或编写好实验程序,上机调试和运行程序,分析实验中遇到的问题。三、实验所需器材与软件微型计算机;C++集成开发工具软件(VC++6.0、CFree、VS等)四、实验过程:设计源程序1:使用股票类stock,在主函数中定义一个对象数组存放连续5个交易日的股票信息。编写一个add函数,根据两个stock对象(前后两日)的当日收盘价,计算当日涨幅。用指针引用对象数组中的两个对象。在主函数中调用该函数计算从第2个交易日开始每天的当日涨幅。#include"iostream"usingnamespacestd;constintN=5;classStock{public:Stock(){};Stock(intn,floatma,floatmi,floatb,floate);voidSet_Stock(intn,floatma,floatmi,floatb,floate);voidSet_Stock();floatGet_End();voidShow_Stock();private:intNumber;floatMax,Min,Begin,End;};Stock::Stock(intn,floatma,floatmi,floatb,floate){Number=n;Max=ma;Min=mi;Begin=b;End=e;}voidStock::Set_Stock(intn,floatma,floatmi,floatb,floate){Number=n;Max=ma;Min=mi;Begin=b;End=e;}floatStock::Get_End(){returnEnd;}voidStock::Show_Stock(){cout<<"编号:"<<Number<<"\t";cout<<"最高盘价:"<<Max<<"\t";cout<<"最低盘价:"<<Min<<"\t";cout<<"开盘价:"<<Begin<<"\t";cout<<"收盘价:"<<End<<"\n";}voidStock::Set_Stock(){cout<<"Number:";cin>>Number;cout<<"Max:";cin>>Max;cout<<"Min:";cin>>Min;cout<<"Begin:";cin>>Begin;cout<<"end:";cin>>End;}//编写主函数:intmain(){ inti; Stock*a,*b; voidadd(Stock&a,Stock&b); Stockp[N]; Stockm(0,0,0,0,0); m.Show_Stock(); for(i=0;i<5;i++) { p[i].Set_Stock(); } for(i=0;i<5;i++) { p[i].Show_Stock(); } for(i=0;i<4;i++) { intj; j=i+1; add(*(p+i),*(p+j));或add(p[i],p[j]); } return0;}//编写add函数:(提示:公式(今天收盘价-昨天收盘价)/昨天收盘价*100%)floatadd(Stock&p1,Stock&p2){voidadd(Stock&a,Stock&b){ floatn;n=(b.Get_End()-a.Get_End())/a.Get_End();cout<<n<<endl;}}实验结果:设计源程序2:在stock类中定义一个静态数据成员,记录当前stock对象的数量。#include"iostream"usingnamespacestd;constintN=2;classStock{public:Stock(){N_count++;};Stock(intn,floatma,floatmi,floatb,floate);voidSet_Stock(intn,floatma,floatmi,floatb,floate);voidSet_Stock();floatGet_End();voidShow_Stock();staticintGet_N_count();private:staticintN_count;intNumber;floatMax,Min,Begin,End;};intStock::N_count=0;Stock::Stock(intn,floatma,floatmi,floatb,floate){N_count++;Number=n;Max=ma;Min=mi;Begin=b;End=e;}voidStock::Set_Stock(intn,floatma,floatmi,floatb,floate){Number=n;Max=ma;Min=mi;Begin=b;End=e;}floatStock::Get_End(){returnEnd;}voidStock::Show_Stock(){cout<<"编号:"<<Number<<"\t";cout<<"最高盘价:"<<Max<<"\t";cout<<"最低盘价:"<<Min<<"\t";cout<<"开盘价:"<<Begin<<"\t";cout<<"收盘价:"<<End<<"\n";}voidStock::Set_Stock(){cout<<"Number:";cin>>Number;cout<<"Max:";cin>>Max;cout<<"Min:";cin>>Min;cout<<"Begin:";cin>>Begin;cout<<"end:";cin>>End;}intStock::Get_N_count(){returnN_count;}编写主函数代码:intmain(){ inti; floatadd(Stock&a,Stock&b),m; Stockp[N]; for(i=0;i<N;i++) { p[i].Set_Stock(); } for(i=0;i<N;i++) { p[i].Show_Stock(); } intj=0; for(i=0;i<N-1;i++) { j=i+1; m=add(*(p+i),*(p+j)); cout<<m<<endl; } cout<<"一共有数据为:"; cout<<Stock::Get_N_count()<<endl;}floatadd(Stock&a,Stock&b){ floatn; n=(b.Get_End()-a.Get_End())/a.Get_End(); returnn;}实验结果:设计源程序3:设计一个成员函数Assign_Stock为对象赋值,其中的形式参数是对另一个Stock对象的引用,使用this指针避免对自己的赋值,在主函数中显示用Assign_Stock赋值的对象。#include"iostream"usingnamespacestd;classStock{public:Stock(){};Stock(intn,floatma,floatmi,floatb,floate);voidSet_Stock(intn,floatma,floatmi,floatb,floate);voidSet_Stock();floatGet_End();voidShow_Stock();voidAssign_Stock(Stock&p);private:intNumber;floatMax,Min,Begin,End;};Stock::Stock(intn,floatma,floatmi,floatb,floate){ Number=n;Max=ma;Min=mi;Begin=b;End=e;}voidStock::Set_Stock(intn,floatma,floatmi,floatb,floate){Number=n;Max=ma;Min=mi;Begin=b;End=e;}floatStock::Get_End(){returnEnd;}voidStock::Show_Stock(){ cout<<"编号:"<<Number<<"\t";cout<<"最高盘价:"<<Max<<"\t";cout<<"最低盘价:"<<Min<<"\t";cout<<"开盘价:"<<Begin<<"\t";cout<<"收盘价:"<<End<<"\n";}voidStock::Set_Stock(){cout<<"Number:";cin>>Number;cout<<"Max:";cin>>Max;cout<<"Min:";cin>>Min;cout<<"Begin:";cin>>Begin;cout<<"end:";cin>>End;}voidStock::Assign_Stock(Stock&p){if(this!=&p){Number=p.Number;Max=p.Max;Min=p.Min;Begin=p.Begin;End=p.End;}}编写主函数代码:intmain(){ Stockp1[2]; inti; for(i=0;i<2;i++) p1[i].Set_Stock(); for(i=0;i<2;i++) p1[i].Assign_Stock(p1[i]); for(i=0;i<2;i++) p1[i].Show_Stock(); return0;}实验结果:设计源程序4:定义一个友元函数计算Stock对象的当日开盘价是否高于当日收盘价。若是,返回真;否则,返回假。#include"iostream"usingnamespacestd;classStock{public:Stock(){};Stock(intn,floatma,floatmi,floatb,floate);voidSet_Stock(intn,floatma,floatmi,floatb,floate);voidSet_Stock();floatGet_End();floatGet_Begin();voidShow_Stock();voidAssign_Stock(Stock&p); friendintadd(Stock&a);private:intNumber;floatMax,Min,Begin,End;};Stock::Stock(intn,floatma,floatmi,floatb,floate){ Number=n;Max=ma;Min=mi;Begin=b;End=e;}voidStock::Set_Stock(intn,floatma,floatmi,floatb,floate){Number=n;Max=ma;Min=mi;Begin=b;End=e;}floatStock::Get_End(){returnEnd;}voidStock::Show_Stock(){ cout<<"编号:"<<Number<<"\t";cout<<"最高盘价:"<<Max<<"\t";cout<<"最低盘价:"<<Min<<"\t";cout<<"开盘价:"<<Begin<<"\t";cout<<"收盘价:"<<End<<"\n";}voidStock::Set_Stock(){cout<<"Number:";cin>>Number;cout<<"Max:";cin>>Max;cout<<"Min:";cin>>Min;cout<<"Begin:";cin>>Begin;cout<<"end:";cin>>End;}floatStock::Get_Begin(){returnBegin;}intadd(Stock&a){return(a.Get_Begin()-a.Get_End());}intmain(){Stockp1[2];inti;for(i=0;i<2;i++)p1[i].Set_Stock();for(i=0;i<2;i++)p1[i].Show_Stock();for(i=0;i<2;i++){intm;m=add(p1[i]);if(m==0)cout<<"今日开盘价等于当日收盘价"<<endl;if(m<0)cout<<"今日开盘价低于当日收盘价"<<endl;if(m>0)cout<<"今日开盘价高于于当日收盘价"<<endl;}return0;}实验结果:设计源程序4:定义类模板实现栈的基本操作,栈的数据结构用带表头结点的单向链表实现。#include<iostream>usingnamespacestd;template<classType>classnode{ public: Typedata; node<Type>*next;};template<classType>classStacklink{ private: node<Type>*top; public: Stacklink(); ~Stacklink(); voidpush(Typevalue); Typepop(); intisnull();};template<classType>Stacklink<Type>::Stacklink(){ node<Type>*T; T=newnode<Type>; T->next=NULL; top=T;}template<classType>Stacklink<Type>::~Stacklink(){ node<Type>*N,*Temp; for(N=top;N!=NULL;) { Temp=N; N=N->next; deleteTemp; }}template<classType>voidStacklink<Type>::push(Typevalue){ node<Type>*T; T=newnode<Type>; if(T!=NULL) { T->next=top; T->data=value; top=T; } else { cout<<endl<<"TheStackisNULL!"; exit(1); }}template<classType>intStacklink<Type>::isnull(){ if(top->next==NULL) return1; else return0;}template<classType>TypeStacklink<Type>::pop(){ Typevalue; node<Type>*Temp; if(top->next==NULL) { cout<<endl<<"TheStackisNULL!"; return(0); } value=top->data; Temp=top; top=top->next; deleteTemp; returnvalue;}intmain(){ intj; Stacklink<int>ss; for(inti=1;i<5;i++) { ss.push(i); } cout<<endl; while(!ss.isnull()) { j=ss.pop(); cout<<j<<"\t"; } cout<<endl; return0;}实验结果:设计源程序5:利用栈的类模板实现将输入的整数转换成八进制并输出#include<iostream>#include"stack.h"usingnamespacestd;template<classT>classStack{public:Stack(intstacksize=10);//构造函数建立具有10元素的默认栈~Stack();voidpush(Tx);Tpop();inthowMany();intsize;//栈的容量private:T*data;//存放栈数据intcount;//存放栈顶指};template<classT>Stack<T>::Stack(intstacksize){if(stacksize>0){size=stacksize;data=newT[stacksize];for(inti=0;i<SIZE;i++)data[i]=0;}else{data=NULL;size=0;}count=0;}template<classT>Stack<T>::~Stack(){deletedata;}template<classT>voidStack<T>::push(Tx){if(count<size){data[count]=x;count++;}else{cout<<"堆栈已满,不能再压入数据:"<<x<<endl;}}template<classT>TStack<T>::pop(){if(count<=0){cout<<endl<<"堆栈已空!"<<endl;exit(1);//堆栈操作失败,退出程序!}count--;returndata[count];}template<classT>intStack<T>::howMany(){returncount;}intmain(){Stack<int>s;inta,i,b;cout<<"Inputyourdecimaldata:";cin>>a;intm=a;while(a>0){b=a%8;a=a/8;s.push(b);}cout<<"十进制数"<<m<<"转化为八进制数为:";for(i=0;i<s.size;i++){cout<<s.pop(); }cout<<endl;return0;}实验结果:实验五实验名称:运算符重载、实验性质:设计性学时数:4、实验成绩_____一、实验目的了解运算符重载的概念和使用方法掌握常用的双目、单目及流运算符重载方法二、实验要求实验前预习教材第4章,事先编写好实验程序,上机调试和运行程序,分析实验中遇到的问题。三、实验所需器材与软件微型计算机;C++集成开发工具软件(VC++6.0、CFree、VS2005等)四、实验过程:设计源程序1:定义一个有理数Rational类,私有数据成员有分子、分母、构造函数有默认参数(分子默认为0,分母默认为1),重载比较运算符<、<=、==、!=。#include<iostream>#include<stdlib.h>classRational{public: Rational(intnum=0,intdenom=1); intoperator<(Rationalr)const; intoperator<=(Rationalr)const; intoperator==(Rationalr)const; intoperator!=(Rationalr)const;private: longnum,den;};Rational::Rational(intp,intq){1)_______num=p_______________________________;2)_______den=q_______________________________;}intRational::operator<(Rationalr)const{ returnnum*r.den<r.num*den;}intRational::operator<=(Rationalr)const{ returnnum*r.den<=r.num*den;}intRational::operator!=(Rationalr)const{ returnnum*r.den!=r.num*den;}intRational::operator==(Rationalr)const{ return3)_num*r.den==.num*den_______________;}intmain(){Rationala(4,5),b(8,5); if(a<b) cout<<"a<b"<<endl; elsecout<<"a>b"<<endl;}实验结果设计源程序2:使用二目算术四则运算符+、-、*、/和单目求反运算符‘-‘实现有理数Rational类的算术运算操作。#include<iostream>#include<stdlib.h>classRational{public: Rational(intnum=0,intdenom=1); Rationaloperator-(); Rationaloperator+(Rationalr); Rationaloperator-(Rationalr); Rationaloperator*(Rationalr); Rationaloperator/(Rationalr); voiddisplay();private: longnum,den;};Rational::Rational(intp,intq){ num=p; den=q;}RationalRational::operator-(){ returnRational(-num,den);}Rational::operator+(Rationalr){ returnRational(num*r.den+den*r.num,r.den*den);}RationalRational::operator-(Rationalr){ returnRational(num*r.den-den*r.num,r.den*den);}RationalRational::operator*(Rationalr){ returnRational(num*r.num,den*r.den);}RationalRational::operator/(Rationalr){ returnRational(num*r.den,den*r.num);}voidRational::display(){longm,n;intres;m=num;n=den;res=m%n;while(res!=0){m=n;n=res;res=m%n;}num=num/n;den=den/n; cout<<num<<"/"<<den<<endl;}intmain(){ Rationala(4,5),b(8,5),c; c=-a; c.display(); c=a+b; c.display(); c=a-b; c.display(); c=a*b; c.display(); c=a/b; c.display(); return0;}实验结果:设计源程序3:对有理数Rational类,重载“<<”和“>>”运算符。#include<iostream>#include<stdlib.h>classRational{public: Rational(intnum=0,intdenom=1); Rationaloperator-(); Rationaloperator+(Rationalr); Rationaloperator-(Rationalr); Rationaloperator*(Rationalr); Rationaloperator/(Rationalr);friendistream&operator>>(istream&,Rational&);friendostream&operator<<(ostream&,Rational&);private: longnum,den;};istream&operator>>(istream&input,Rational&r){cout<<"请输入数:"; input>>r.num>>r.den; returninput;}ostream&operator<<(ostream&output,Rational&r){ output<<r.num<<"/"<<r.den<<endl; returnoutput;}Rational::Rational(intp,intq){longm,n;intres;m=p;n=q;res=m%n;while(res!=0){m=n;n=res;res=m%n;}p=p/n;q=q/n; num=p; den=q;}RationalRational::operator-(){ returnRational(-num,den);}RationalRational::operator+(Rationalr){ returnRational(num*r.den+den*r.num,r.den*den);}RationalRational::operator-(Rationalr){ returnRational(num*r.den-den*r.num,r.den*den);}RationalRational::operator*(Rationalr){ returnRational(num*r.num,den*r.den);}RationalRational::operator/(Rationalr){ returnRational(num*r.den,den*r.num);}intmain(){ Rationala,b,c; cin>>a>>b; c=-a; cout<<c; c=a+b; cout<<c; c=a-b; cout<<c; c=a*b; cout<<c; c=a/b; cout<<c; return0;}实验结果:五、实验总结:实验六实验名称:派生类与继承、实验性质:设计性学时数:4、实验成绩_____一、实验目的理解类的继承的概念,能够定义和使用类的继承关系掌握派生类的声明与定义方法熟悉公有派生和私有派生的访问特性学习虚基类在解决二义性问题中的作用二、实验要求实验前预习教材第5章,事先编写好实验程序,上机调试和运行程序,分析实验中遇到的问题。三、实验所需器材与软件微型计算机;C++集成开发工具软件(VC++6.0、CFree、VS2005等)四、实验过程:设计源程序1:定义一个基类MyArray,基类中可以存放一组整数,完善这个类并上机测试。classMyArray{public:MyArray(intleng);~MyArray();voidInput();voidDisplay();protected:int*alist;intlength;};基类中有构造函数、析构函数、输入数据和输出数据的函数。#include“iostream"usingnamespacestd;classMyArray{public:MyArray(intleng);~MyArray();voidInput();voidDisplay();protected:int*alist;intlength;};inti;MyArray::MyArray(intleng){ length=leng; if(length>0) { alist=newint[length]; for(i=0;i<length;i++) alist[i]=0; } else { alist=NULL; }}voidMyArray::Input(){ cout<<"请输入数组:"; for(i=0;i<length;i++) { cin>>alist[i]; }}voidMyArray::Display(){ cout<<"该数组为:"; for(i=0;i<length;i++) { cout<<alist[i]; } cout<<endl;}MyArray::~MyArray(){ deletealist;}intmain(){ MyArrayarry(5); arry.Input(); arry.Display(); return0;}实验结果设计源程序2:定义一个类SortArray继承自MyArray,在该类中定义函数实现排序功能。#include“iostream"usingnamespacestd;classMyArray{public:MyArray(intleng);~MyArray(){}voidInput();voidDisplay();protected:int*alist;intlength;};classSortArray:publicMyArray{public:~SortArray(){}SortArray(intleng):MyArray(leng){} voidsort(); };inti,j;intflag=0;MyArray::MyArray(intleng){ length=leng; if(length>0) { alist=newint[length]; for(i=0;i<length;i++) { alist[i]=0; } } else { alist=NULL; }}voidMyArray::Input(){ cout<<"请输入数组:"; for(i=0;i<length;i++) { cin>>alist[i]; }}voidMyArray::Display(){ if(flag==0) { cout<<"该数组为:"; flag=1; } else cout<<"排完序后的数组为:"; for(i=0;i<length;i++) { cout<<alist[i]<<"\t"; } cout<<endl;}voidSortArray::sort(){ intk,temp; for(i=0;i<length;i++) { k=i; for(j=k+1;j<length;j++) if(alist[j]>alist[k]) k=j; temp=alist[i]; alist[i]=alist[k]; alist[k]=temp; }}intmain(){ SortArrays(5); s.Input(); s.Display(); s.sort(); s.Display(); return0;}实验结果设计源程序3:定义一个类ReArray继承自MyArray,在该类中定义函数实现逆转功能。#include“iostream"usingnamespacestd;classMyArray{public:MyArray(intleng);~MyArray(){}voidInput();voidDisplay();protected:int*alist;intlength;};classReArray:publicMyArray{ public: ReArray(intlength):MyArray(length){} ~ReArray(){} voidreorder();};inti,j;intflag=0;MyArray::MyArray(intleng){ length=leng; if(length>0) { alist=newint[length]; for(i=0;i<length;i++) { alist[i]=0; } } else alist=NULL;}voidMyArray::Input(){ cout<<"请输入数组:"; for(i=0;i<length;i++) { cin>>alist[i]; }}voidMyArray::Display(){ if(flag==0) { cout<<"该数组为:"; flag=1; } else cout<<"逆转序后的数组为:"; for(i=0;i<length;i++) { cout<<alist[i]<<"\t"; } cout<<endl;}voidReArray::reorder(){ for(i=0,j=length-1;i<j;i++,j--) { alist[i]=alist[i]+alist[j]; alist[j]=alist[i]-alist[j]; alist[i]=alist[i]-alist[j]; }}intmain(){ ReArrayr(5); r.Input(); r.Display(); r.reorder(); r.Display(); return0;}实验结果设计源程序4:定义一个类AverArray继承自MyArray,在该类中定义函数求解整数的平均值。#include“iostream"usingnamespacestd;classMyArray{public:MyArray(intleng);~MyArray(){}voidInput();voidDisplay();protected:int*alist;intlength;};classAverArray:publicMyArray{ public: AverArray(intlength):MyArray(length){} ~AverArray(){} doubleave();};inti,j;intflag=0;MyArray::MyArray(intleng){ length=leng; if(length>0) { alist=newint[length]; for(i=0;i<length;i++) { alist[i]=0; } } else alist=NULL;}voidMyArray::Input(){ cout<<"请输入数组:"; for(i=0;i<length;i++) { cin>>alist[i]; }}voidMyArray::Display(){ if(flag==0) { cout<<"该数组为:"; flag=1; } else cout<<"逆转序后的数组为:"; for(i=0;i<length;i++) { cout<<alist[i]<<"\t"; } cout<<endl;}doubleAverArray::ave(){ doublesum=0,aver; for(i=0;i<length;i++) { sum=sum+alist[i]; } returnsum/length;}intmain(){ AverArraya(5); a.Input(); a.Display(); cout<<"该组数的平均值为:"; cout<<a.ave()<<endl; return0;}实验结果设计源程序5:定义类NewArray,同时继承了SortArray,ReArray和AverArray,使得类的对象同时具有排序、逆转、和求平均值的功能。在继承的过程中声明为虚基类,体会虚基类在解决二义性问题中的作用。#include“iostream"usingnamespacestd;classMyArray{public:MyArray(intleng);~MyArray(){}voidInput();voidDisplay();protected:int*alist;intlength;};classAverArray:virtualpublicMyArray{ public: AverArray(intleng):MyArray(leng){} ~AverArray(){} doubleave();};classSortArray:virtualpublicMyArray{public:~SortArray(){}SortArray(intleng):MyArray(leng){} voidsort(); };classReArray:virtualpublicMyArray{ public: ReArray(intleng):MyArray(leng){} ~ReArray(){} voidreorder();};classNewArray:virtualpublicMyArray,virtualpublicAverArray,virtualpublicReArray,virtualpublicSortArray{ public: ~NewArray(){} NewArray(intleng):MyArray(leng),AverArray(leng),ReArray(leng),SortArray(leng){}};inti,j;MyArray::MyArray(intleng){ length=leng; if(length>0) { alist=newint[length]; for(i=0;i<length;i++) { alist[i]=0; } } else alist=NULL;}voidMyArray::Input(){ cout<<"请输入数组:"; for(i=0;i<length;i++) { cin>>alist[i]; }}voidMyArray::Display(){ intflag=0; if(flag==0) { cout<<"该数组为:"; flag=1; } else cout<<"逆转序后的数组为:"; for(i=0;i<length;i++) { cout<<alist[i]<<"\t"; } cout<<endl;}doubleAverArray::ave(){ doublesum=0,aver; for(i=0;i<length;i++) { sum=sum+alist[i]; } returnsum/length;}voidSortArray::sort(){ intk,temp; for(i=0;i<length;i++) { k=i; for(j=k+1;j<length;j++) if(alist[j]>alist[k]) { k=j; } temp=alist[i]; alist[i]=alist[k]; alist[k]=temp; }}voidReArray::reorder(){ for(i=0,j=length-1;i<j;i++,j--) { alist[i]=alist[i]+alist[j]; alist[j]=alist[i]-alist[j]; alist[i]=alist[i]-alist[j]; }}intmain(){ NewArrayn(5); n.Input(); n.Display(); n.sort(); n.Display(); n.reorder(); n.Display(); cout<<"该组数据的平均值为:"; cout<<n.ave()<<endl; return0;}实验结果实验七实验名称:虚函数与多态性、实验性质:设计性、学时数:4、实验成绩_____一、实验目的理解静态多态性和动态多态性掌握运算符重载的基本方法掌握虚函数的定义与使用方法二、实验要求实验前预习教材第6章,事先按要求填充或编写好实验程序,上机调试和运行程序,分析实验中遇到的问题。三、实验所需器材与软件微型计算机;C++集成开发工具软件(VC++6.0、CFree、VS2005等)四、实验过程:设计源程序1:定义一个类Animal,该类中可以存放动物的名字,并有一个Identify函数用于显示动物的种类。#include<iostream>#include<strength>classAnimal{public:Animal(){name=NULL;} Animal(char*n); ~Animal() {deletename;}virtualvoidIdentify();protected: char*name;};Animal::Animal(char*n){name=newchar[stolen(n)+1]; strcpy(name,n);}voidAnimal::Identify(){cout<<"\negenericanimal:"<<name<<endl;}intmain(){Animala("cat"); a.Identify();return0;}实验结果:设计源程序3:定义两个类Cat和Dog,都继承自Animal,并重载Identify函数,不但要显示动物的种类,还要显示动物的名字。#include<iostream>#include<strength>classAnimal{public:Animal(char*n){ name=newchar[strlen(n)+1_____________];__________strcpy(name,n)________________;}virtualvoidIdentify();protected: char*name;};voidAnimal::Identify(){ cout<<"genericanimal"<<name<<endl;}classCat:publicAnimal{public:Cat(char*n):Animal(n){ } voidIdentify();};voidCat::Identify(){ cout<<"Iamacatcalled"<<name<<endl;}classDog:publicAnimal{public:Dog(char*n):Animal(n){ }voidIdentify();};voidDog::Identify(){ cout<<"Iamadogcalled"<<name<<endl;}intmain(){ Catcat("猫咪"); cat.__Identify()_____________; Dogdog("虎子"); dog.Identify();}实验结果:设计源程序4:定义Tiger类,继承自Cat,重载Identify函数,显示动物的种类和名字。#include<iostream>#include"string"usingnamespacestd;classAnimal{public:Animal(stringn){name=n;}virtualvoidIdentify();protected: stringname;};voidAnimal::Identify(){cout<<"genericanimal:"<<name<<endl;}classCat:publicAnimal{public: Cat(stringn):Animal(n){} voidIdentify();};voidCat::Identify(){cout<<"Iamacatcalled"<<name<<endl;}classTiger:publicCat{public:Tiger(stringn):Cat(n){}voidIdentify();};voidTiger::Identify(){cout<<"IamaTigercalled"<<name<<endl;}intmain(){Catcat("猫咪"); cat.Identify(); Tigertiger("老虎"); tiger.Identify(); return0;}实验结果五、实验总结:实验八实验名称:输入输出格式的控制、实验性质:设计性、学时数:2、实验成绩_____一、实验目的熟悉流及流类库的作用熟练掌握流类库中常用的类及其成员函数的使用方法掌握重载“<<”和“>>”的方法掌握控制输出宽度的函数width和setw掌握函数setionsflags和resetonflags设置和恢复对齐方式、精度、大小写、进制等。二、实验要求实验前预习教材第7章,事先按要求填充或编写好实验程序,上机调试和运行程序,分析实验中遇到的问题。三、实验所需器材与软件微型计算机;C++集成开发工具软件(VC++6.0、CFree、VS等)四、实验过程:设计源程序1:对Rational类,重载“<<”和“>>”.#include<iostream>#include<stdlib.h>classRational{public:Rational(intnum=0,intdenom=1);friendistream&operator>>(istream&istr,Ratinal&r);friendostream&operator<<(ostream&ostr,constRational&d);private:longnum,den;voidstandardize(void);};voidRational::Standardize(void){if(den<0){//使分母大于0,符号在分子上den=-den;num=-num;}}Rational::Rational(intp,intq):num(p),den(q){if(den==0){cerr<<”AZerodenominatorisinvalid”<<endl;exit(1);}}填写类成员函数的实现代码:代码填写在方框中//
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025如果合同标的不合格怎么办反担保
- 2025【合同范本】贸易中介合同范本
- 扬帆起航追逐梦想主题班会
- 2025年岳麓版选修四地理上册月考试卷
- 2025钢材购销合同
- 2025年人教A新版八年级地理上册阶段测试试卷
- 2024年空间探索与应用项目投资合同
- 项目委托合同范本
- 2025版兼职劳务合同范文
- 2025年锂亚电池项目立项申请报告模稿
- 韵达快递员工劳务合同范本
- 血液透析水处理系统演示
- 附件:中铁建工集团项目精细化管理流程体系文件
- 小批量试制总结报告
- 2023年经济开发区工作会议表态发言
- YY/T 0216-1995制药机械产品型号编制方法
- 糖尿病足与周围血管病01课件
- 2022年试行林木采伐管理方案
- 消防设施操作员报名承诺书
- 灌肠操作评分标准
- 企业年金基金管理机构基本服务和收费标准规范规范行业自律公约
评论
0/150
提交评论