您好,欢迎访问三七文档
第一次1、问题的提出:编写程序熟悉拷贝函数的三种用法。理解临时对象的概念,并知道它的作用、何时被创建、何时被析构。补充:同时请尝试派生类的拷贝构造函数的三种调用与析构。#includestdafx.h#includeiostreamusingnamespacestd;classBase{public:Base(){cout基类构造函数被调用。endl;};Base(Base&p){cout基类拷贝构造函数被调用。endl;};~Base(){cout基类析构函数被调用。endl;};};classPaisheng:publicBase{public:Paisheng(){cout派生类构造函数被调用。endl;};Paisheng(Base&p){cout派生类拷贝函数被调用。endl;};~Paisheng(){cout派生类析构函数被调用。endl;};};voidfun1(Basep){}Basefun2(){cout在fun2开始建立基类对象base_obj用于返回...endl;Basebasefun_obj;cout建立基类对象base_obj成功。endl;cout开始返还基类对象...endl;returnbasefun_obj;}Paishengfun3(){cout在fun3开始建立派生类对象pai_obj用于返回...endl;Paishengpaifun_obj;cout建立基类对象pai_obj成功。endl;cout开始返还派生类对象...endl;returnpaifun_obj;}intmain(){cout开始建立基类对象base_obj1...endl;Basebase_obj1;cout建立基类对象base_obj1成功。\nendl;cout开始建立基类对象base_obj2,用已有基类对象base_obj1初始化...endl;Basebase_obj2(base_obj1);cout建立基类对象base_obj2成功。\nendl;cout开始调用函数Fun1,用基类对象base_obj1作为实参传递...endl;fun1(base_obj1);cout基类对象为实参调用函数fun1成功。\nendl;cout开始调用函数Fun2,返回值为基类对象...endl;fun2();cout基类对象作为返回值调用函数fun2成功。\nendl;coutendl;cout开始建立派生类对象pai_obj1...endl;Paishengpai_obj1;cout建立派生类对象pai_obj1成功。\nendl;cout开始建立派生类对象pai_obj2,用已有派生类对象pai_obj1初始化...endl;Paishengpai_obj2(pai_obj1);cout建立派生类对象pai_obj2成功。\nendl;cout开始调用函数Fun1,用派生类对象pai_obj1作为实参传递...endl;fun1(pai_obj1);cout派生类对象为实参调用函数fun1成功。\nendl;cout开始调用函数Fun3,返回值为派生类对象...endl;fun3();cout派生类对象作为返回值调用函数fun3成功。\nendl;coutendl;return0;}调试结果:2、问题的提出:17世纪法国数学家加斯帕的一本《数学的游戏问题》描述了许多有趣问题,约瑟问题就是其中之一:15名基督教徒和15名异教徒同乘一船航行,途中风浪大作,危机万分,领航者告诉大家,只要将全船的一半人投入海中,其余人就能幸免。大家都同意这个办法,并协定者30人围成一圈;由第一个人起报数,每数至第9人便把他投入海中,下一个接着从1开始报数,第9人又被投入海中,依次循环,直至剩下15人为止。问题是如何排法使投入海中的人全为异教徒?补充:同时请尝试输入人数,输出人数,间隔人数均由用户输入。#includestdafx.h#includeiostreamusingnamespacestd;classSUANFA{public:SUANFA(inta,intb,intc){m_n=a;m_s=b;m_w=c;}voidgetresult();private:intm_n,m_s,m_w;};voidSUANFA::getresult(){inta[100];inti,j,p;intk=0;for(i=0;im_n;i++){a[i]=1;}i=0;for(k=0;km_n-m_s;k++){for(j=1;im_n;i++){if(a[i]!=0){j++;}if(j==m_w+1){a[i]=0;break;}if(i==m_n-1){i=-1;}}}cout应该是坐的位置分别为:endl;for(i=0;im_n;i++){if(a[i]!=0){cout第(i+1);}}cout位endl;}intmain(){intn,s;cout请输入总人数:endl;cinn;cout请输入可以存活的人数:endl;cins;intw;cout请输入间隔数据:endl;cinw;SUANFAa(n,s,w);a.getresult();return0;}调试结果:第二次1、对友元函数使用的尝试。#includestdafx.h#includeiostreamusingnamespacestd;classA{public:A(intc=0){a=c;}friendclassB;friendvoidFun(A&);private:inta;};classB{public:B(){cout类B的构造函数被调用。endl;coutobj.aendl;}private:Aobj;};voidFun(A&o){cout友元函数调用成功。endl;couto.aendl;}intmain(){Aobj1;Bobj2;Fun(obj1);return0;}调试结果:2、一个基类CShape,类中含有一个纯虚函数voidGetArea();在此基础上派生出CRectangle类和CCircle类,实现函数GetArea()。要求:a)构造函数需要重载,能够传入计算面积所需要的成员变量b)将计算的面积结果能更输出,写出测试函数main().#includestdafx.h#includeiostreamusingnamespacestd;constdoublePI=3.14;classCShape{public:CShape(){cout基类CShape的构造函数被调用。endl;};virtualvoidGetArea()=0;~CShape(){cout基类CShape的析构函数被调用。endl;};};classCRectangle:publicCShape{public:CRectangle(doubleaaa,doublebbb):CShape(){m_a=aaa;m_b=bbb;cout派生类CRectangle的构造函数被调用。endl;}voidGetArea(){cout矩形的面积是:m_a*m_bendl;cout派生类CRectangle的GetArea被调用。\nendl;coutendl;}~CRectangle(){cout派生类CRectangle的析构函数被调用。endl;};private:doublem_a,m_b;};classCCircle:publicCShape{public:CCircle(doublerrr):CShape(){m_r=rrr;cout派生类CCircle的构造函数被调用。endl;}voidGetArea(){cout圆形的面积是:m_r*m_r*PIendl;cout派生类CCircle的GetArea被调用。endl;coutendl;}~CCircle(){cout派生类CCircele的析构函数被调用。endl;};private:doublem_r;};intmain(){doubleaa,bb;cout请输入矩形的长和宽:endl;cinaabb;cout开始建立CRectangle派生类对象obj1传参...endl;CRectangleobj1(aa,bb);cout开始建立基类指针并使其指向派生类CRectangle的对象obj1...endl;CShape*p=&obj1;coutendl;cout利用CRectangle派生类对象名使用函数...endl;obj1.GetArea();cout利用基类指针指向函数...endl;p-GetArea();coutendl;doublerr;cout请输入圆的半径:endl;cinrr;cout开始建立派生类CCircle对象obj2并传参...endl;CCircleobj2(rr);cout使基类指针P指向派生类CCircle的对象obj2...endl;p=&obj2;cout利用CRectangle派生类对象名使用函数...endl;obj2.GetArea();cout利用基类指针P指向函数...endl;p-GetArea();coutendl;cout开始进行析构...endl;coutendl;return0;}调试结果:第三次1、数max(a,b),功能是计算a和b的最大值。要求:c)先用函数模板Tmax(Ta,Tb)实现d)再用类模板实现该函数,其中含有一个成员函数Tmax(Ta,Tb).e)a和b的值可有系统cin语句读入,写出测试函数。函数:#includestdafx.h#includeiostreamusingnamespacestd;templateclassTTmax(Ta,Tb){if(ab){returna;}else{returnb;}}intmain(){intm;cout请输入您需要比较数据类型的代码:1-int,2-double,3-float,4-char,5-boolendl;cinm;switch(m){case1:inta1,b1;cout请输入两个int型的数据:endl;cina1b1;cout较大的值是:max(a1,b1)endl;break;case2:doublea2,b2;cout请输入两个double型的数据:endl;cina2b2;cout较大的值是:max(a2,b2)endl;break;case3:floata3,b3;cout请输入两个float型数据:endl;cina3b3;cout较大的值是:max(a3,b3)endl;break;case4:chara4,b4;cout请输入两个char型数据:endl;cina4b4;cout较大的值是:max(a4,b4)endl;break;case5:boola5,b5;cout请输入两个bool型数据:endl;cina5b5;cout较大的值是:max(a5,b5)endl;break;}return0;}结果:类模板:#includeStdAfx.h#includeiostr
本文标题:平时实习题目-答案
链接地址:https://www.777doc.com/doc-2489594 .html