面向对象程序设计与VC实践习题答案.ppt

上传人:wuy****n92 文档编号:86904467 上传时间:2023-04-15 格式:PPT 页数:85 大小:1.49MB
返回 下载 相关 举报
面向对象程序设计与VC实践习题答案.ppt_第1页
第1页 / 共85页
面向对象程序设计与VC实践习题答案.ppt_第2页
第2页 / 共85页
点击查看更多>>
资源描述

《面向对象程序设计与VC实践习题答案.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计与VC实践习题答案.ppt(85页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、面向对象程序设计习题面向对象程序设计习题优秀精品课件文档资料优秀精品课件文档资料面向对象程序设计习题面向对象程序设计习题习习题题22-1-4:比较值调用和引用调用?:比较值调用和引用调用?值调用是指发生函数调用时,给形参分配内存空间,并直值调用是指发生函数调用时,给形参分配内存空间,并直接将实参的值传递给形参。这一过程是参数的单向传递过接将实参的值传递给形参。这一过程是参数的单向传递过程,一旦形参获得了值便与实参脱离关系,此后无论形参程,一旦形参获得了值便与实参脱离关系,此后无论形参发生了怎样的改变,都不会影响到实参。发生了怎样的改变,都不会影响到实参。引用调用不为形参分配内存,在执行主调函数

2、中的调用语引用调用不为形参分配内存,在执行主调函数中的调用语句时,系统自动用实参来初始化形参。形参是实参的一个句时,系统自动用实参来初始化形参。形参是实参的一个别名,对形参的任何操作也就直接作用于实参。别名,对形参的任何操作也就直接作用于实参。传址是把实参的地址传给形参,从而形参和实参同占一个传址是把实参的地址传给形参,从而形参和实参同占一个内存空间,所以形参变实参也变内存空间,所以形参变实参也变;传值是实参把值赋值给传值是实参把值赋值给形参,两个参数占有不同的地址,所以实参不随形参变化形参,两个参数占有不同的地址,所以实参不随形参变化而变化而变化!面向对象程序设计习题面向对象程序设计习题(7

3、)编写程序,打印如下的杨辉三角形:编写程序,打印如下的杨辉三角形:111121133114641#include#include/#includevoidmain()inti,j,a55=1;/第一行第一列赋值第一行第一列赋值1,其他为,其他为0for(i=1;i5;i+)ai0=1;/第一列全置为第一列全置为1for(j=1;j=i;j+)aij=ai-1j-1+ai-1j;/每个数是上面两数之和每个数是上面两数之和for(i=0;i5;i+)/输出杨辉三角输出杨辉三角coutsetw(5-i);/for(j=0;j5-i;j+)printf();for(j=0;j=i;j+)/只输出只输出

4、a55的下三角的下三角coutsetw(2)aij;/printf(%2d,aij);coutendl;方法一方法一1000011000121001331014641面向对象程序设计习题面向对象程序设计习题#include#include/#includevoidmain()inti,j,a55;for(i=0;i5;i+)ai0=1;aii=1;/第一列、对角全置为第一列、对角全置为1for(j=1;ji;j+)aij=ai-1j-1+ai-1j;/每个数是上面两数之和每个数是上面两数之和for(i=0;i5;i+)/输出杨辉三角输出杨辉三角coutsetw(5-i);/for(j=0;j5

5、-i;j+)printf();for(j=0;j=i;j+)/只输出只输出a55的下三角的下三角coutsetw(2)aij;/printf(%2d,aij);coutendl;方法一变形方法一变形111121133114641面向对象程序设计习题面向对象程序设计习题#includevoidmain()inta59,i,j;for(i=0;i5;i+)for(j=0;j9;j+)aij=0;/所有元素赋值所有元素赋值0for(i=0;i5;i+)/左右两斜边赋值左右两斜边赋值1ai4-i=1;ai4+i=1;for(i=2;i1;j-)aij=ai-1j-1+ai-1j+1;for(i=0;i

6、5;i+)for(j=0;j9;j+)if(aij=0)cout;/值为值为0的元素输出为空格的元素输出为空格elsecoutaij;coutendl;方法二方法二000010000000101000001020100010303010104060401面向对象程序设计习题面向对象程序设计习题(8)将将一一个个一一维维数数组组中中相相同同的的元元素素删删除除到到只只保保留留一一个个,然然后后按按由大到小的顺序输出。由大到小的顺序输出。#includevoidmain()inta6=1,7,3,7,22,9;inti,j,t,flag;intm=6,n;n=m;/n控制输出不同的元素个数控制输出

7、不同的元素个数/删除相同元素删除相同元素for(i=0;im;i+)for(j=i+1;jn;j+)if(ai=aj)for(intk=j;kn;k+)ak=ak+1;/前移前移n-;j-;/冒泡排序冒泡排序for(i=0;in;i+)flag=0;for(j=0;jn-i-1;j+)if(ajaj+1)t=aj;aj=aj+1;aj+1=t;flag=1;if(flag=0)break;cout排序后的数组为:排序后的数组为:n;for(i=0;in;i+)coutain;面向对象程序设计习题面向对象程序设计习题习习题题33-1 填空题(1)生生存存期期与与存存储储区区域域关关系系密密切切,

8、一一般般存存储储区区域域分分为为代代码码区区(codearea)、数数据据区区域域(dataarea)、栈栈区区(stackarea)和和堆堆区区(heaparea)。代代码码区区用用来来存存放放程程序序代代码码,与与其其他他存存储储区区相相对对应应的的生生存存期期分分别别为为静静态态生生存存期期、局局部部生存期生存期、和和动态生存期动态生存期。(2)局局部部变变量量一一般般具具有有块块作作用用域域,还还可可能能具具有有作作用用域域;全全局局变变量量具具有有文件文件作用域。作用域。(3)静静态态成成员员属属于于类类,而而不不属属于于对对象象,它它由由同同一一个个类类的的所所有有对对象象共共同同

9、维维护护,为为这这些些对对象象所所共共享享。静静态态函函数数成成员员可可以以直直接接引引用用该该类类的的静静态态数数据据和和函函数数成成员员,而而不不能能直直接接引引用用非非静静态态数数据据成成员员。对对于于公公有有的的静静态态函函数数成成员员,可可以以通通过过类类名名或或对对象象名名来来调调用用;而而一一般般的的非非静静态态函函数数成成员只能通过对象名来调用。员只能通过对象名来调用。(4)在在实实际际程程序序设设计计中中,一一个个源源程程序序可可划划分分为为三三个个文文件件:类类声声明明文文件件、类类实现文件实现文件、和和类的使用文件类的使用文件。面向对象程序设计习题面向对象程序设计习题3-

10、3 阅读程序题(1)以以下下是是一一个个类类中中包包含含另另一一个个类类对对象象成成员员(类类的的组组合合)的例子,试分析并给出以下程序的运行结果。的例子,试分析并给出以下程序的运行结果。面向对象程序设计习题面向对象程序设计习题#includeclassSonintage;public:Son()age=1;Son(inti)age=i;voidprint()cout儿子的年龄是:儿子的年龄是:ageendl;classFatherintage;Sons1,s2;/类的组合类的组合public:Father(inta1,inta2,intf):s2(a2),s1(a1)age=f;voidpr

11、int()cout“父父 亲亲 的的 年年 龄龄 是是:ageendl;Son&gets1()cout第一个第一个;returns1;Son&gets2()cout第二个第二个;returns2;voidmain()Fatherf(10,5,38);f.print();f.gets1().print();f.gets2().print();父亲的年龄是:父亲的年龄是:38第一个儿子的年龄是:第一个儿子的年龄是:10第二个儿子的年龄是:第二个儿子的年龄是:5面向对象程序设计习题面向对象程序设计习题#include#includeclassstudentcharname10;intage;publ

12、ic:student(charin_name,intin_age)strcpy(name,in_name);age=in_age;intget_age()returnage;char*get_name()returnname;friendintcompare(student&s1,student&s2)if(s1.ages2.age)return1;elseif(s1.age=s2.age)return0;elsereturn-1;(2)程序代码如下:程序代码如下:面向对象程序设计习题面向对象程序设计习题voidmain()student stu=student(王王 红红,18),stude

13、nt(吴吴 伟伟,19),student(李李 丽丽,17);inti,min=0,max=0;for(i=1;i3;i+)if(compare(stumax,stui)=-1)max=i;elseif(compare(stumax,stui)=1)min=i;cout最大年龄:最大年龄:stumax.get_age(),姓名:,姓名:stumax.get_name()endl;cout最小年龄:最小年龄:stumin.get_age(),姓名:,姓名:stumin.get_name()endl;程序运行结果为程序运行结果为:最大年龄:最大年龄:19,姓名:吴伟,姓名:吴伟最小年龄:最小年龄:

14、17,姓名:李丽,姓名:李丽面向对象程序设计习题面向对象程序设计习题#includeclassstack;classnodeintdata;node*prev;public:node(intd,node*n)data=d;prev=n;friendclassstack;(3)下列程序实现的是堆栈的压入和弹出。其中有两个类,一个下列程序实现的是堆栈的压入和弹出。其中有两个类,一个是结点类,它包含结点值和指向上一结点的指针;另一个类是是结点类,它包含结点值和指向上一结点的指针;另一个类是堆栈类,数据成员为堆栈的头指针,它是结点类的友员。试分堆栈类,数据成员为堆栈的头指针,它是结点类的友员。试分析程

15、序,并说明堆栈的压入和弹出过程。析程序,并说明堆栈的压入和弹出过程。classstacknode*top;public:stack()top=0;voidpush(inti);intpop();voidstack:push(inti)node*n=newnode(i,top);top=n;intstack:pop()node*t=top;if(top)top=top-prev;intc=t-data;deletet;returnc;return0;main()intc;stacks;for(intj=0;jc;s.push(c);for(j=0;j10;j+)/10个整数出栈,个整数出栈,co

16、uts.pop()“”;/实现了输入的顺序与输出的顺序相反实现了输入的顺序与输出的顺序相反coutn;return1;分析:实现了输入的顺序与分析:实现了输入的顺序与输出的顺序相反输出的顺序相反面向对象程序设计习题面向对象程序设计习题3-4完成下列程序完成下列程序(1)下下面面是是一一个个计计算算器器类类的的定定义义,请请完完成成该该类类的的实实现现(成成员员函函数数的的定定义义),并并在在主主函函数数中中先先将将计计算算器器给给定定初初值值99,然然后进行二次加后进行二次加1,一次减,一次减1,最后显示计算器的值。,最后显示计算器的值。classcounterintvalue;public:

17、counter(intnumber);/构造函数构造函数voidincrement();/给原值加给原值加lvoiddecrement();/给原值减给原值减1intgetvalue();/取得计数值取得计数值voiddisplay();/显示计算器值显示计算器值;面向对象程序设计习题面向对象程序设计习题#includeclasscounterintvalue;public:counter(intnumber);voidincrement();/给原值加给原值加lvoiddecrement();/给原值减给原值减1intgetvalue();/取得计数值取得计数值voiddisplay();/

18、显示计算器值显示计算器值;counter:counter(intnumber)value=number;voidcounter:increment()value+;voidcounter:decrement()value-;intcounter:getvalue()returnvalue;voidcounter:display()coutvalue=valueendl;voidmain()countercounter1(99);counter1.increment();/+counter1.increment();/+counter1.decrement();/-counter1.displa

19、y();面向对象程序设计习题面向对象程序设计习题(2)下列程序接收若干用户的姓名和电话,然后输出。下列程序接收若干用户的姓名和电话,然后输出。#includeiostream.h#includestring.h#includeiomanip.hconstintN=5;classpersoncharname10;charnum10;public:voidgetdata()strcpy(name,na);strcpy(num,nu);voidoutdata(personpnN);voidperson:outdata(personpnN)inti;for(i=0;iN;i+)cout.width(1

20、0);cout.width(10);voidmain()char*na5=li,zh,li,zh,li;char*nu5=01,02,03,04,05;personobj5;/对象数组对象数组for(inti=0;i5;i+)obji.getdata(nai,nui);*pt=obj;char*na,char*nu或:或:charna,charnucoutpni.nameendl;coutpni.numoutdata(pt);或:或:pt-outdata(obj);面向对象程序设计习题面向对象程序设计习题3-5 编程题(1)定定义义一一个个名名为为rectangle的的矩矩形形类类,其其属属性

21、性数数据据为为矩矩形形左左上上角角和和右右下下角角点点的的坐坐标标,要要求求通通过过对对该该类类对对象象的的调调用计算矩形的面积。用计算矩形的面积。#include#includeclassRectangle intX1,Y1,X2,Y2;public:Rectangle(intx1,inty1,intx2,inty2)X1=x1;Y1=y1;X2=x2;Y2=y2;intArea();intRectangle:Area()returnfabs(X2-X1)*(Y2-Y1);voidmain()RectangleA(10,20,30,50);cout面积为面积为A.Area()endl;面向对

22、象程序设计习题面向对象程序设计习题(2)定定义义一一个个名名为为complex的的复复数数类类,其其属属性性数数据据为为复复数数的的实实部部和和虚虚部部,要要求求构构造造函函数数和和拷拷贝贝构构造造函函数数,并并定定义成员函数打印复数的值。义成员函数打印复数的值。#includeclasscomplex/复数类声明复数类声明 doublereal;doubleimag;public:complex(doubler=0.0,doublei=0.0)/构造函数构造函数real=r;imag=i;complex(complex&c)/拷贝构造函数拷贝构造函数real=c.real;imag=c.im

23、ag;voiddisplay()/显示复数的值显示复数的值cout“实部为实部为:”real“虚部为虚部为:imagendl;voidmain()complexA;A.display();complexB(2,3);B.display();complexC(B);C.display();面向对象程序设计习题面向对象程序设计习题(3)定义一个名为定义一个名为circle的圆类,其属性数据为圆的半径,的圆类,其属性数据为圆的半径,定义成员函数计算圆的面积。编写主函数计算一个内定义成员函数计算圆的面积。编写主函数计算一个内径和外径分别为径和外径分别为5和和8的圆环的面积。的圆环的面积。#includ

24、econstfloatPI=3.14159;/definePI3.14159classcircle/类声明类声明 doubleradius;public:circle(doubler=0.0)radius=r;/构造函数构造函数doublearea()returnPI*radius*radius;voidmain()circleA(5);circleB(8);cout圆环面积圆环面积B.area()-A.area()endl;面向对象程序设计习题面向对象程序设计习题(4)试试定定义义一一个个字字符符串串类类string,使使其其至至少少具具有有内内容容(contents)和和长长度度(leng

25、th)两两个个数数据据成成员员,分分别别定定义义不不同同的的成成员员函函数数,用用于于显显示示字字符符串串、求求字字符符串串长长度度、给给原原字字符符串串后后连连接接另另一一个个字字符串。符串。#include#includeclassstring/类声明类声明intlength;char*contents;public:string()length=0;contents=0;string(constchar*str);/构造函数构造函数voiddisplay()const;/显示值显示值voidgetlength();voidappend(constchar*tail);string:str

26、ing(constchar*str)length=strlen(str);contents=newcharlength+1;strcpy(contents,str);面向对象程序设计习题面向对象程序设计习题voidstring:display()const/显示显示if(contents=0)coutempty.n;elsecout字符串的内容为字符串的内容为contentsendl;voidstring:getlength()/获取长度获取长度length=strlen(contents);cout字符串的长度为字符串的长度为lengthendl;voidstring:append(cons

27、tchar*tail)/连接连接char*tmp;length+=strlen(tail);tmp=newcharlength+1;strcpy(tmp,contents);strcat(tmp,tail);deletecontents;contents=tmp;voidmain()strings0,s1(astring);s0.display();s1.display();s1.getlength();strings2(this);s2.append(astring);cout连接的连接的;s2.display();面向对象程序设计习题面向对象程序设计习题(5)编编写写一一个个程程序序:声声

28、明明一一个个Cat类类,拥拥有有静静态态数数据据成成员员HowManyCats,用用以以记记录录Cat的的个个体体数数目目;拥拥有有静静态态成成员员函函数数GetHowMany(),用用以以存存取取HowManyCats。设设计计程程序序并并测试这个类,体会静态数据成员和静态成员函数的用法。测试这个类,体会静态数据成员和静态成员函数的用法。#includeclassCatstaticintHowManyCat;/引用性说明引用性说明public:Cat()HowManyCat+;Cat()HowManyCat-;staticvoidGet_HowManyCat()cout总数总数:HowMan

29、yCatendl;intCat:HowManyCat=0;/定义性说明定义性说明voidmain()Catf1;Cat:Get_HowManyCat();Catf2;f2.Get_HowManyCat();f1.Cat();Cat:Get_HowManyCat();面向对象程序设计习题面向对象程序设计习题(7)实现一单链表的逆置,并输出逆置前后的结果。实现一单链表的逆置,并输出逆置前后的结果。structNode intdata;Node*next;classListNode*head;public:List()head=NULL;voidInsertList(intaData,intbDat

30、a);/链表结点的插入链表结点的插入voidDeleteList(intaData);/链表结点的删除链表结点的删除voidOutputList();/链表结点的输出链表结点的输出Node*Gethead()returnhead;Node*reverse(Node*head);voidList:OutputList()/链表输出函数链表输出函数Node*current=head;while(current!=NULL)coutdatanext;coutnext;/q指向指向2号号while(q!=NULL)r=q-next;/r指向指向3号号q-next=p;/2号的号的next指向指向1号号

31、p=q;/p指向指向2号号q=r;/q指向指向3号号head-next=NULL;/1号的号的next指向指向NULL,head=p;/循循环环结结束束之之后后,p指指向向原原来来的的末末结结点点,现现在在是是头头结结点点returnhead;/返回头结点返回头结点面向对象程序设计习题面向对象程序设计习题习题习题44-1 填空题(1)派派生生新新类类的的过过程程经经历历三三个个过过程程:吸吸收收基基类类成成员员、改改造造基基类类成成员员和和添添加加新的成员新的成员。(2)在在类类族族中中,直直接接参参与与派派生生出出某某类类的的基基类类称称为为直直接接基基类类;基基类类的的基基类类甚甚至更高层

32、的基类称为至更高层的基类称为间接基类间接基类。(3)在在继继承承中中,如如果果只只有有一一个个基基类类,则则这这种种继继承承方方式式称称为为单单继继承承;如如果果基类名有多个,则这种继承方式称为基类名有多个,则这种继承方式称为多继承多继承。(4)C+中中的的运运算算符符除除了了类类属属关关系系运运算算符符“.”、作作用用域域分分辨辨符符“:”、成成员员指指针针运运算算符符“*”、sizeof运运算算符符和和三三目目运运算算符符“?:”之之外外,全全部部可以重载,而且只能重载可以重载,而且只能重载C+中已有的运算符,不能臆造新的运算符。中已有的运算符,不能臆造新的运算符。(5)如如果果用用普普通

33、通函函数数重重载载双双目目运运算算符符,需需要要1个个操操作作数数;重重载载单单目目运运算算符符,需需要要0个个操操作作数数。如如果果用用友友员员函函数数重重载载双双目目运运算算符符,需需要要2个个操操作作数数;重载单目运算符,需要重载单目运算符,需要1个操作数。个操作数。(6)当当基基类类中中的的某某个个成成员员函函数数被被声声明明为为虚虚函函数数后后,此此虚虚函函数数就就可可以以在在一一个个或或多多个个派派生生类类中中被被重重新新定定义义,在在派派生生类类中中重重新新定定义义时时,其其函函数数原原型型,包包括括返返回回类类型型、函函数数名名和和参参数数个个数数,以以及及参参数数类类型型和和

34、参参数数的的顺顺序序都都必必须与基类中的原型完全相同。须与基类中的原型完全相同。面向对象程序设计习题面向对象程序设计习题4-3 阅读程序题阅读程序题分析下列程序,写出运行结果分析下列程序,写出运行结果(1)程序代码如下:程序代码如下:考察:继承关系考察:继承关系#includeclassBintx1,x2;public:voidInit(intn1,intn2)x1=n1;x2=n2;intinc1()return+x1;intinc2()return+x2;voiddisp()coutB,x1=x1,x2=x2endl;面向对象程序设计习题面向对象程序设计习题classD1:Bintx3;p

35、ublic:D1(intn3)x3=n3;voidInit(intn1,intn2)B:Init(n1,n2);intinc1()returnB:inc1();intinc2()returnB:inc2();intinc3()return+x3;voiddisp()coutD1,x3=x3endl;classD2:publicBintx4;public:D2(intn4)x4=n4;intinc1()inttemp=B:inc1();temp=B:inc1();temp=B:inc1();returnB:inc1();intinc4()return+x4;voiddisp()coutD2,x4

36、=x4endl;面向对象程序设计习题面向对象程序设计习题B,x1=-2,x2=-2D1,x3=3D2,x4=6D2,x4=6D2,x4=6voidmain()Bb;b.Init(-2,-2);b.disp();D1d1(3);d1.Init(5,5);d1.inc1();d1.disp();D2d2(6);d2.Init(-4,-4);d2.B:disp();d2.disp();d2.inc1();d2.inc2();d2.B:disp();d2.disp();d2.B:inc1();d2.B:disp();d2.disp();B,x1=-2,x2=-2D1,x3=3B,x1=-4,x2=-4

37、D2,x4=6B,x1=0,x2=-3D2,x4=6B,x1=1,x2=-3D2,x4=6面向对象程序设计习题面向对象程序设计习题(2)程序代码如下(课件例题):程序代码如下(课件例题):考察:虚拟派生中构造函数的执行顺序考察:虚拟派生中构造函数的执行顺序#includeclassLevel1/声明基声明基类类Level1public:intn1;Level1(intin_n1)n1=in_n1;coutThisisLevel1,n1=n1endl;classLevel21:virtualpublicLevel1/Level1为为虚基虚基类类,派生,派生类类Level21public:intn

38、21;Level21(inta):Level1(a)n21=a;coutThisisLevel21,n21=n21endl;面向对象程序设计习题面向对象程序设计习题classLevel22:virtualpublicLevel1/Level1为为虚基虚基类类,派生,派生类类Level22public:intn22;Level22(inta):Level1(a)n22=a;coutThisisLevel22,n22=n22endl;classLevel3:publicLevel21,publicLevel22/声明派生声明派生类类Level3public:intn3;Level3(inta):L

39、evel1(a),Level21(a),Level22(a)n3=a;coutThisisLevel3,n3=n3endl;voidmain()Level3obj(3);/定定义义Level3类对类对象象objThisisLevel1,n1=3ThisisLevel21,n21=3ThisisLevel22,n22=3ThisisLevel3,n3=3程序运行结果为:程序运行结果为:面向对象程序设计习题面向对象程序设计习题(3)下下列列程程序序中中,基基类类base和和派派生生类类d1、d2中中都都含含有有私私有有、保保护护和和公公有有成成员员,d1类类是是base的的派派生生类类,d2是是d

40、1的的派派生类。试分析下列程序的访问权限。生类。试分析下列程序的访问权限。考察:继承中成员访问属性的变化考察:继承中成员访问属性的变化面向对象程序设计习题面向对象程序设计习题#includeclassbaseprivate:intn1;protected:intk1;public:base()n1=0;k1=1;voidfun1()coutn1k1endl;classd1:publicbaseintn2;protected:intk2;public:d1()n2=10;k2=11;voidfun2()coutn1k1endl;coutn2k2endl;classd2:publicd1intn3

41、;protected:intk3;public:d2()n3=20;k3=21;voidfun3()coutn1k1endl;coutn2k2endl;coutn3k3endl;面向对象程序设计习题面向对象程序设计习题voidmain()basebaseobj;d1d1obj;d2d2obj;baseobj.fun1();d1obj.fun2();d2obj.fun3();回答下列问题:回答下列问题:l l派派生生类类d1中中成成员员函函数数fun2()能能否否访访问问基基类类base中中的的成成员员fun1()、n1和和k1?l l派派生生类类d1的的对对象象能能否否访访问问基基类类base

42、中中的的成成员员fun1()、n1和和k1?l l派派生生类类d2中中成成员员函函数数fun3()能能否否访访问问直直接接基基类类d1中中的的成成员员fun2()、n2和和k2?能否访问基类?能否访问基类base中的成员中的成员fun1()、n1和和k1?l l派派生生类类d2的的对对象象能能否否访访问问直直接接基基类类d1中中的的成成员员fun2()、n2和和k2?能否访问基类?能否访问基类base中的成员中的成员fun1()、n1和和k1?以上程序有错,请改正,并上机验证。以上程序有错,请改正,并上机验证。privateprotectedpublicbasen1k1base(),fun1(

43、)d1n2k2d1(),fun2()d2n3k3d2(),fun3()privateprotectedpublicbasen1k1base(),fun1()d1n2k2k1d1(),fun2()fun1()d2n3k3k2k1d2(),fun3()fun2()fun1()面向对象程序设计习题面向对象程序设计习题(1)能访问能访问base中公有的中公有的fun1()和保护的和保护的k1,不能访问私有的,不能访问私有的n1(2)能访问能访问base中公有的中公有的fun1(),不能访问,不能访问n1和和k1(3)能访问能访问d1中公有的中公有的fun2()和和k2,不能访问私有的,不能访问私有的n

44、2能访问能访问base中公有的中公有的fun1()和和k1,不能访问私有的,不能访问私有的n1(4)能访问能访问d1中公有的中公有的fun2(),不能访问私有的,不能访问私有的n2和和k2能访问能访问base中公有的中公有的fun1(),不能访问私有的,不能访问私有的n1和和k1fun2函数中:函数中:coutn1k1endl;替换为替换为fun1();fun3函数中:函数中:coutn1k1endl;coutn2k2endl;替换为替换为fun2();面向对象程序设计习题面向对象程序设计习题(4)下下列列程程序序是是一一个个有有关关虚虚基基类类及及其其派派生生类类的的初初始始化化的的程程序序

45、。如如果果虚虚基基类类定定义义有有非非默默认认形形式式的的(即即带带形形参参)构构造造函函数数,在在整整个个继继承承结结构构中中,直直接接或或间间接接继继承承虚虚基基类类的的所所有有派派生生类类,都都必必须在构造函数的须在构造函数的成员初始化表成员初始化表中列出对虚基类的初始化。中列出对虚基类的初始化。面向对象程序设计习题面向对象程序设计习题#includeclassB1public:intn1;B1(intin_n1)n1=in_n1;coutB1,n1=n1endl;classB21:virtualpublicB1public:intn21;B21(inta):B1(a)n21=a;cou

46、tB21,n21=n21endl;classB22:virtualpublicB1public:intn22;B22(inta):B1(a)n22=a;coutB22,n22=n22endl;classB3:publicB21,publicB22public:intn3;B3(inta):B1(a),B21(a),B22(a)n3=a;coutB3,n3=n3endl;voidmain()B3obj(5);B1,n1=5B21,n21=5B22,n22=5B3,n3=5程序运行结果为:程序运行结果为:面向对象程序设计习题面向对象程序设计习题如果程序运行结果为:如果程序运行结果为:B1,n1=5

47、B22,n22=5B21,n21=5B3,n3=5上述程序应该怎么改?上述程序应该怎么改?如果将如果将B3(inta):B1(a),B21(a),B22(a)n3=a;coutB3,n3=n3endl;中的中的B21(a)和和B22(a)的位置调换,程序的运的位置调换,程序的运行结果是否会有变化?行结果是否会有变化?classB3:publicB21,publicB22改为改为classB3:publicB22,publicB21没有变化,初始化的顺序与继承顺序有关,与初始化列表的顺没有变化,初始化的顺序与继承顺序有关,与初始化列表的顺序无关序无关面向对象程序设计习题面向对象程序设计习题4-4

48、 完成下列程序(1)下下列列程程序序是是一一个个从从Point类类私私有有派派生生新新的的矩矩形形Rectangle类的程序。请填空完成程序,并上机运行验证。类的程序。请填空完成程序,并上机运行验证。面向对象程序设计习题面向对象程序设计习题classRectangle:private:floatW,H;public:voidInitR(floatx,floaty,floatw,floath);W=w;H=h;voidMove(floatxOff,floatyOff)Point:Move(xOff,yOff);floatGetX()returnPoint:GetX();floatGetY()re

49、turnPoint:GetY();floatGetH()returnH;floatGetW()returnW;#include#includeclassPointprivate:floatX,Y;public:voidInitP(floatxx=0,floatyy=0)X=xx;Y=yy;voidMove(floatxOff,floatyOff);floatGetX()returnX;floatGetY()returnY;classRectangle:private:floatW,H;public:voidInitR(floatx,floaty,floatw,floath);W=w;H=h;v

50、oidMove(floatxOff,floatyOff)Point:Move(xOff,yOff);floatGetX()returnPoint:GetX();floatGetY()returnPoint:GetY();floatGetH()returnH;floatGetW()returnW;面向对象程序设计习题面向对象程序设计习题voidmain()Rectanglerect;rect.InitR(2,3,20,10);rect.Move(3,2);coutThedataofrect(X,Y,W,H):endl;coutrect.GetX(),rect.GetY(),rect.GetW()

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁