您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C++程序设计综合实验
深圳大学实验报告课程名称:面向对象程序设计实验序号:试验七实验名称:C++程序设计综合实验班级:姓名:隔壁老王学号:2010100001实验日期:2011年12月11日教师签字:一、实验目的:(1)掌握类和对象的实现;(2)掌握类的静态成员函数和友元函数的运用;(3)掌握类的继承与派生的编程特点;(4)掌握运算符承载的程序设计。二、实验环境:硬件环境:办公楼二楼软件实验室软件环境:VisualC++6.0集成环境三、实验要求:1.定义一个课程类CCourse,其中包含课程号(longno)、课程学分(floatcredit)两个数据成员,以及相应的构造函数、拷贝构造函数、析构函数和打印数据成员的成员函数print()。2.为CCourse类增加一个数据成员课程总数(inttotal_course),并增加一个成员函数getTotalCourse()获取total_course的值,编写一个友元函数getCourseNo()获取课程号no。做如上修改后,重新实现CCourse类(与第1问相同的不用再重复,注意说明数据成员和成员函数的存储类型,以便能够用类名来调用getTotalCourse()。3.为CCourse类定义小于运算符(‘’)运算符重载函数。CCourse类对象大小的比较是根据其课程学分(credit)的值的大小来实现的(与第2问相同的不用再重复)。4.编写测试程序对Ccourse类进行测试。5.以CCourse类为基类,派生出面向对象程序设计课程类COOP,并在该类中增加一个表示开课单位的指针数据成员(char*p_openby)和根据学生学号判断能否选课的成员函数boolselect(constchar*p_xh)(只有学号前4位为2010的学生可选面向对象程序设计课程)。写出COOP类的完整定义(包括构造、拷贝构造、析构和select()成员函数的实现)。6.编写测试程序进行测试。7.为了能够采用动态联编的方式调用派生类COOP的boolselect(constchar*p_xh)成员函数,应该在Ccourse类及其派生类COOP中作何改动?四、实验内容与结果:(源程序及运行截图)1、classCCourse{private:longno;floatcredit;char*p_name;public:CCourse();CCourse(longn,char*na,floatc);CCourse(constCCourse&course);voidprint();~CCourse();};CCourse::CCourse(){no=0;p_name=newchar[20];strcpy(p_name,coursename);credit=0.0;}CCourse::CCourse(longn,char*na,floatc){no=n;p_name=newchar[20];strcpy(p_name,na);credit=c;}CCourse::CCourse(constCCourse&course){p_name=newchar[strlen(course.p_name)+1];if(p_name==NULL)exit(0);strcpy(p_name,course.p_name);credit=course.credit;}voidCCourse::print(){coutCoursenumber:noendl;coutCoursename:p_nameendl;coutCoursecredit:creditendl;}CCourse::~CCourse(){deletep_name;}2、classCCourse{private:longno;floatcredit;char*p_name;staticinttotal_course;public:CCourse();CCourse(longn,char*na,floatc);CCourse(constCCourse&course);voidprint();~CCourse();staticgetTotalCourse(){returntotal_course;}friendlonggetCourseNo(constCCourse&course);};intCCourse::total_course=0;CCourse::CCourse(){no=0;p_name=newchar[20];strcpy(p_name,coursename);credit=0.0;}CCourse::CCourse(longn,char*na,floatc){no=n;p_name=newchar[20];strcpy(p_name,na);credit=c;total_course++;}CCourse::CCourse(constCCourse&course){p_name=newchar[strlen(course.p_name)+1];if(p_name==NULL)exit(0);strcpy(p_name,course.p_name);credit=course.credit;total_course++;}voidCCourse::print(){coutCoursenumber:noendl;coutCoursename:p_nameendl;coutCoursecredit:creditendl;}CCourse::~CCourse(){deletep_name;total_course--;}longgetCourseNo(constCCourse&course){returncourse.no;}3、classCCourse{public:booloperator(constCCourse&course);};intCCourse::total_course=0;boolCCourse::operator(constCCourse&course){if(creditcourse.credit)returntrue;elsereturnfalse;}4、源程序:#includeiostreamusingnamespacestd;#includestringclassCCourse{private:longno;floatcredit;char*p_name;staticinttotal_course;public:CCourse();CCourse(longn,char*na,floatc);CCourse(constCCourse&course);voidprint();~CCourse();staticgetTotalCourse(){returntotal_course;}friendlonggetCourseNo(constCCourse&course);booloperator(constCCourse&course);boolCCourse::operator(constCCourse&course){if(creditcourse.credit)returntrue;elsereturnfalse;}CCourse::CCourse(){no=0;p_name=newchar[20];strcpy(p_name,coursename);credit=0.0;}CCourse::CCourse(longn,char*na,floatc){no=n;p_name=newchar[20];strcpy(p_name,na);credit=c;total_course++;}CCourse::CCourse(constCCourse&course){p_name=newchar[strlen(course.p_name)+1];if(p_name==NULL)exit(0);strcpy(p_name,course.p_name);credit=course.credit;total_course++;}voidCCourse::print(){coutCoursenumber:noendl;coutCoursename:p_nameendl;coutCoursecredit:creditendl;}CCourse::~CCourse(){deletep_name;total_course--;}intCCourse::total_course=0;longgetCourseNo(constCCourse&course){returncourse.no;}voidmain(){intc=0;longsc;CCoursecourse1(2011100,高等数学,5.0);course1.print();CCoursecourse2(2011101,大学英语,2.5);course2.print();CCoursecourse3(2011102,线性代数,3.5);course3.print();CCoursecourse4(2011103,面向对象程序设计,4.0);course4.print();c=course4.getTotalCourse();sc=getCourseNo(course1);coutTotalcourse:cendlcourse1'sNO:scendl;if(course1course2)coutcourse2'screditlargerthancourse1's.endl;elsecoutcourse2'screditdonotlargerthancourse1's.endl;}程序截图:5-6、源程序:classCOOP:publicCCourse{private:char*p_openby;public:boolselect(constchar*p_xh){if(strncmp(p_xh,2010,4)==0)returntrue;elsereturnfalse;}COOP(longn,char*na,floatc,char*p_open):CCourse(n,na,c){p_openby=newchar[strlen(p_open)+1];strcpy(p_openby,p_open);}COOP(constCOOP&coop){p_openby=newchar[strlen(coop.p_openby)+1];if(p_openby==NULL)exit(0);strcpy(p_openby,coop.p_openby);}~COOP(){deletep_openby;}voidprint(){CCourse::print();cout开课单位:p_openbyendl;}};voidmain(){charstno[20];COOPcoop1(2011103,面向对象程序设计,4.0,计算机与软件设计学院);coop1.print();cout请输入学号:endl;cinstno;if(coop1.select(stno))cout可以选课endl;elsecout不能选课endl;}程序截图:7、要实现动态联编成员函数必须声明为virtual,如果基类中声明了为虚函数,则派生类中不必再声明。在classCCourse定义中增加:public:virtualboolselect(constchar*p_xh){if(strncmp(p_xh,2010,4)==0)returntrue;elsereturnfalse;}五、实验总结:(实验中遇到的困难和问题,如何解决的,在完成整个实验过程中的体会与感想。)碰到最多的就是函数参数格式用错使编译不通过,百度、查阅资料能很好地解决。有时候不是语法问题,而是
本文标题:C++程序设计综合实验
链接地址:https://www.777doc.com/doc-2444185 .html