C面向对象程序设计教程版陈维兴林小茶课后习题答案.pdf

上传人:暗伤 文档编号:4884845 上传时间:2021-11-21 格式:PDF 页数:89 大小:218.03KB
返回 下载 相关 举报
C面向对象程序设计教程版陈维兴林小茶课后习题答案.pdf_第1页
第1页 / 共89页
C面向对象程序设计教程版陈维兴林小茶课后习题答案.pdf_第2页
第2页 / 共89页
点击查看更多>>
资源描述

《C面向对象程序设计教程版陈维兴林小茶课后习题答案.pdf》由会员分享,可在线阅读,更多相关《C面向对象程序设计教程版陈维兴林小茶课后习题答案.pdf(89页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C C 面面向向对对象象程程序序设设计计教教程程版版陈陈维维兴兴林林小小茶茶课课后后习习题题答答案案 Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#C+面向对象程序设计教程课后题答案1.1?什么是面向对象程序设计面向对象程序设计是一种新的程序设计范型.这种范型的主要特征是:程序=对象+消息面向对象程序的基本元素是对象。主要结构特点是:第一,程序一般由类的定义和类的使用两部分组成;第二,程序中的一切操作都是通过向对象发送消息来实现的。1.2?什么是对象什么是类对象与类之间的关系是什么对象是描述其属性的数据以及对这些数据施加

2、的一组操作封装在一起构成的统一体。类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。类和对象之间的关系是抽象和具体的关系。类是多个对象进行综合抽象的结果,一个对象是类的一个实例。1.3 现实世界中的对象有哪些特征请举例说明。现实世界中的对象具有以下特征:1)每一个对象必须有一个名字以区别于其他对象;2)用属性来描述对象的某些特征;3)有一组操作,每组操作决定对象的一种行为;4)对象的行为可以分为两类:一类是作用于自身的行为,另一类是作用于其他对象的行为。例如一个教师是一个对象。每个教师对象有自己的名字来和别的教师区别。教师具有编号,姓

3、名,年龄,职称,专业等属性。教师拥有走路,吃饭,授课等行为操作。走路,吃饭是作用于自身的行为,授课是作用于其他对象的行为。1.4 什么是消息消息具有什么性质一个对象向另一个对象发出的请求成为“消息”。消息具有以下 3 个性质:1)同一个对象可以接收不同形式的多个消息,做出不同的相应;2)相同形式的消息可以传递给不同的对象,所做出的响应可以是不同的;3)对消息的响应并不是必须的,对象可以响应消息,也可以不响应。1.5 什么是抽象和封装请举例说明。抽象是将有关事物的共性归纳、集中的过程。例如:把所有具有大学生学籍的人归为一类,成为“大学生”,这就是一个抽象。封装是指把数据和实现操作的代码集中起来放

4、在对象内部,并尽可能隐藏对象的内部细节。例如:每一台洗衣机都有出厂日期、机器编号等属性,也有启动、暂停、选择等操作。人们在使用洗衣机的时候只需要按下对应的按钮,而不用关心具体的内部实现。这就是封装。1.6 什么是继承请举例说明。继承就是允许派生类使用基类的数据和操作,同时,派生类还可以增加新的操作和数据。例如:哺乳动物是一种热血、有毛发、用奶哺育幼崽的动物;狗是有犬牙、食肉、特定的骨骼结构、群居的哺乳动物。狗就继承了哺乳动物。1.7 若类之间具有继承关系,则他们之间具有什么特征若类之间具有继承关系,则他们之间具有下列几个特征:1)类间具有共享特征(包括数据和操作代码的共享);2)类间具有差别或

5、新增部分(包括非共享的数据和操作代码);3)类具有层次结构。1.8 什么是单继承、多继承请举例说明。单继承是指每个派生类只直接继承了一个基类的特征。例如狗继承自哺乳动物。多继承是指多个基类派生出一个派生类的继承关系。比如玩具车同时继承自玩具和车。1.9 什么是多态请举例说明。多态是指不同的对象收到相同的消息时执行不同的操作。例如,有一个窗口类对象,还有一个棋子类对象。当我们发出“移动”消息时,两个对象的行为不同。1.10 面向对象程序设计的主要优点是什么1. 可提高程序的重用性;2. 可控制程序的复杂性;3. 可改善程序的可维护性;4. 能够更好地支持大型程序设计;5. 增强了计算机处理信息的

6、范围;能够很好地适应新的硬件环境。2.1 简述 C+的主要特点。1)C+是 C 的超集,保持与 C 的兼容。2)保持了 C 的简洁、高效和接近汇编语言等特点,并对 C 的功能作了不少扩充。用C+编写的程序比 C 更安全,可读性更好,代码结构更为合理。3)程序质量高。4)增加了面向对象机制。2.2#includeusingnamespacestd;intmain()inta,b,d,min;coutab;min=abb:a;for(d=2;dmin;d+)if(a%d)=0)&(b%d)=0)break;if(d=min)coutNocommondenominatorsendl;retu

7、rn0;coutThelowestcommondenominatorisdendl;return0;2.3 有效2.4 没有函数声明;函数定义没有写返回值类型。2.5(1)等价,函数声明可以省略参数的名字。(2)不等价,第二个的函数定义不能省略参数的名字。2.6-2.10CDAAB2.11-2.15ACBDC2.16-2.17DC2.181012.1910102.2010202.21 举例说明可以使用 const 替代#define 以消除#define 的不安全性。#includeusingnamespacestd;intmain()inta=1;#defineT1a+a#defineT2T

8、1-T1coutT2isT2endl;return0;上面这个程序,初看应该输出 T2is0但是实际上,得出 T2is2如果把#define 换成 const,则可以输出想要的结果。2.22 用动态分配空间的方法,计算 Fibonacci 数列的前 20 项,并存储到动态分配的空间中。#includeusingnamespacestd;intmain()int*pi=newint20;*pi=1;pi1=1;for(inti=2;i20;i+)pii=pii-2+pii-1;return0;2.23 重载 sroot 函数,输出一个数的二次方根。#includeusingnamespacest

9、d;doublesroot(intnum)return(double)sqrt(double)num);doublesroot(longnum)return(double)sqrt(double)num);doublesroot(doublenum)return(double)sqrt(num);intmain()return0;2.24 解决百钱问题。将一元人民币换成 1、2、5 分的硬币,有多少种换法?#includeusingnamespacestd;intmain()intnum=0;/总共换法的总数。初始化为 0。for(inti=0;i=100;i+)for(intj=0;j100

10、)break;for(intk=0;k=20;k+)if(i+2*j+5*k)=100)num+;cout1 分i个;2 分j个;5 分k个;100)break;coutnumendl;return0;2.25 输入两个整数,按由小到大的顺序输出。要求使用变量的引用。#includeusingnamespacestd;voidswap(int&a,int&b)a=a+b;b=a-b;a=a-b;intmain()inta,b;cinab;if(ab)swap(a,b);couta,bendl;return0;2.26 用二分法求解 f(x)=0 的根。#includeusing

11、namespacestd;doubleFun(doublex)return35*x+25;/假设 f(x)=35x+25intmain()doublea,b;cina;if(Fun(a)=0)coutx=ab;while(Fun(a)*Fun(b)=0);if(Fun(b)=0)coutx=bb)a=a+b;b=a-b;a=a-b;while(1)if(Fun(a+b)/2)=0)coutx=(a+b)/2endl;return0;if(Fun(a)*Fun(a+b)/2)0)b=(a+b)/2;if(Fun(b)*Fun(a+b)/2)0)a=(a+b)/2;return0;3.1 类声明的

12、一般格式是什么class 类名private:私有数据成员和成员函数public:公有数据成员和成员函数3.2 构造函数和析构函数的主要作用是什么它们各自有什么特性构造函数是一种特殊的成员函数,它主要用于为对象分配空间,进行初始化。构造函数的名字必须与类名相同,而不能由用户任意命名。它可以有任意类型的参数,但不能具有返回值类型。析构函数通常用于执行一些清理任务,如释放分配给对象的内存空间等。析构函数名与类名相同,但它前面必须加一个波浪号。不能有返回值,也不能有参数。3.3 什么是对象数组?所谓对象数组,是指每一个数组元素都是对象的数组。3.4 什么是 this 指针它的主要作用是什么C+为成员

13、函数提供了一个名为 this 的指针,这个指针称为自引用指针。每当创建一个对象时,系统就把 this 指针初始化为指向该对象。一个类的所有对象合用一份成员函数,this 指针可以帮助对象辨别出当前调用的是自己的那个对象的数据成员和函数。3.5 友元函数有什么作用?友元函数可以在类的外部访问类的私有成员或保护成员。3.6(1)声明并定义了 P2,P3,并用默认无参构造函数初始化。(2)声明并定义了 P2,并调用 Point 类的拷贝构造函数用 P1 对 P2 进行初始化。(3)声明并定义了 P2,并调用 Point 类的拷贝构造函数用 P1 对 P2 进行初始化。(4)调用拷贝构造函数,将 P1

14、 的成员值赋值给 P4 的成员。3.7-3.10BCCB3.11-3.15BAABA3.16-3.17BB3.1810,2030,4850,6870,8090,1611,1203.19Constructing10100Destructing3.203objectsinexistence4objectsinexistenceafterallocation3objectsinexistenceafterdeletion3.21Countingat0Countingat93.22Defaultconstructorcalled.Defaultconstructorcalled.Defaultcons

15、tructorcalled.Construcotor:a=1,b=2Construcotor:a=3,b=4Construcotor:a=5,b=63.23Con.Copycon.default.Copycon.3.24A=5B=14A=9B=143.255,722.253.26ConstructingConstructingA=5B=15A=10B=15DestructingDestructing3.27voidpintStu();函数只有声明,没有定义。age 是私有成员,不能用对象直接调用。3.28voidprintStu()和 voidsetSno(ints)没有加限定符 Studen

16、t:voidsetAge(inta)在类中没有声明3.29构造函数不能定义为私有。否则无法创建对象。3.30 下面是一个计算器类的定义,请完成该类成员函数的实现。classcounterpublic:counter(intnumber);voidincrement();/给原始值加 1voiddecrement();/给原始值减 1intgetvalue();/取的计数器值intprint();/显示计数private:intvalue;counter:counter(intnumber)value=number;voidcounter:increment()+value;voidcounte

17、r:decrement()-value;intcounter:getvalue()returnvalue;intcounter:print()coutvalueendl;returnvalue;3.31 根据注释语句提示,实现类#includeusingnamespacestd;classDatepublic:voidprintDate();voidsetDay(intd);voidsetMonth(intm);Date 的成员函数voidsetYear(inty);private:intday,month,year;voidDate:printDate()cout今天是year年month月

18、day日endl;voidDate:setDay(intd)day=d;voidDate:setMonth(intm)month=m;voidDate:setYear(inty)year=y;intmain()DatetestDay;testDay.setDay(5);testDay.setMonth(10);testDay.setYear(2003);testDay.printDate();return0;3.32 建立类 cylinder,cylinder 的构造函数被传递了两个 double 值,分别表示圆柱体的半径和高度。用类 cylinder 计算圆柱体的体积,并存储在一个 doub

19、le 变量中。在类 cylinder 中包含一个成员函数 vol,用来显示每个 cylinder 对象的体积。constintPI=3.14;classcylinderprivate:doubleradius,height,volume;public:cylinder(intrad,inthei);doublegetVolume();voidvol();cylinder:cylinder(intrad,inthei)radius=rad;height=hei;doublecylinder:getVolume()volume=PI*radius*radius*height;returnvolum

20、e;voidcylinder:vol()cout圆柱体的体积是:volumeendl;3.33 构建一个类 book,其中包含有两个私有数据成员 qu 和 price,将 qu 初始化为 15,将 price 初始化为 qu 的 10 倍,建立一个有 5 个元素的数组对象。显示每个对象数组元素的 qu*price 值。classbookprivate:intqu,price;public:book(intqu);intmult();book:book(intq)if(q5)qu=1;elsequ=q;price=10*qu;intbook:mult()returnqu*price;intmai

21、n()bookbooks5=1,2,3,4,5;for(inti=0;i5;i+)coutbooksi.mult();3.34 修改 3.33,通过对象指针访问对象数组,使程序以相反的顺序显示每个对象数组元素的 qu*price 值。classbookprivate:intqu,price;public:book(intqu);intmult();book:book(intq)if(q5)qu=1;elsequ=q;price=10*qu;intbook:mult()returnqu*price;intmain()bookbooks5=1,2,3,4,5;book*p=books;p+=4;f

22、or(inti=0;i5;i+)coutmult();-p;return0;3.35 构建一个类 Stock,含字符数组 stockcode及整型数组成员 quan、双精度型数据成员 price。构造函数含 3 个参数:字符数组 na及 q、p。当定义 Stock 的类对象时,将对象的第一个字符串参数赋给数据成员 stockcode,第 2 和第 3 个参数分别赋给 quan、price。未设置第 2 和第 3 个参数时,quan 的值为 1000,price的值为 8.98.成员函数 print 没有形参,需使用 this 指针,显示对象数据成员的内容。编写程序显示对象数据成员的值。#inc

23、ludeusingnamespacestd;classStockprivate:charstockcode25;intquan;doubleprice;public:Stock(charna,intq=1000,doublep=8.98);Stock(charna);voidprint();Stock:Stock(charna,intq=1000,doublep=8.98)strcpy(stockcode,na);quan=q;price=p;voidStock:print()coutstockcode:stockcodequan:quanprice:priceendl;intmain()St

24、ockstock1(600001,3000,5.67);Stockstock2(600002);stock1.print();stock2.print();return0;3.36 编写一个程序,已有若干学生的数据,包括学号、姓名、成绩,要求输出这些学生的数据并计算出学生人数和平均成绩(要求将学生人数和总成绩用静态数据成员表示)。#includeusingnamespacestd;classstudentprivate:charname25,studentNo10;intscore;staticintsum;staticinttotalScore;public:student(charna,c

25、harstuNo,intsc);voidshow();staticvoidshowTotal();student:student(charna,charstuNo,intsc)strcpy(name,na);strcpy(studentNo,stuNo);score=sc;+sum;totalScore+=sc;voidstudent:show()cout姓名:nameendl;cout学号:studentNoendl;cout成绩:scoreendl;voidstudent:showTotal()cout总人数:sumendl;cout平均成绩:(double)totalScore/sume

26、ndl;intstudent:sum=0;intstudent:totalScore=0;intmain()students1(张无忌,111254,75);students2(李莫愁,254114,60);students3(小龙女,112587,88);s1.show();s2.show();s3.show();student:showTotal();return0;4.1 有哪几种继承方式每种方式的派生类对基类成员的继承性如何公有继承,私有继承和保护继承。基类的私有成员,无论哪种继承方式都不能访问。公有继承不改变基类的公有和保护成员的访问限制。私有继承将基类的公有和保护成员都变成私有。保

27、护继承将基类的公有和保护成员都变成保护。4.2 派生类能否直接访问基类的私有成员若否,应如何实现不能。可以在基类里添加一个公有成员函数来访问私有成员,派生类就能继承这个公有成员函数,实现对基类私有成员的访问。4.3 保护成员有哪些特性保护成员以公有方式或私有方式继承后的访问特性如何保护成员只能被本类或本类的派生类所访问,在类或派生类外是不能被访问的。后面一问见第一题的答案。4.4 派生类构造函数和析构函数的执行顺序是怎样的?构造函数是先执行父类的构造函数,再执行类中其他类对象的构造函数,再执行本类的构造函数。如果同级有多个构造函数,则按声明顺序执行。析构函数与构造函数的执行顺序刚好相反。4.5

28、 派生类构造函数和析构函数的构造规则是怎样的?派生类名(参数总表):基类名(参数总表)派生类新增数据成员的初始化语句派生类中的析构函数与基类无关。4.6 什么是多继承多继承时,构造函数与析构函数的执行顺序是怎样的多继承是指一个类同时继承自多个不同的基类。执行顺序同 4.44.7 在类的派生中为何要引入虚基类虚基类构造函数的调用顺序是如何规定的如果一个类有多个直接基类,而这些直接基类又有一个共同的基类,则在最底层的派生类中会保留这个简介的共同基类数据成员的多份同名成员。在访问这些同名成员的时候,会产生二义性。为了解决二义性,引入了虚基类。1)如果虚基类中定义有带形参的构造函数,并且没有定义默认形

29、式的构造函数,则整个继承结构中,所有直接或间接的派生类都必须在构造函数的成员初始化表中列出对虚基类构造函数的调用,以初始化在虚基类中定义的数据成员。2)建立一个对象时,如果这个对象中含有从虚基类继承来的成员,则虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。该派生类的其他基类对虚基类构造函数的调用都自动被忽略。3)若同一层次中同时包含虚基类和非虚基类,应先调用虚基类的构造函数,再调用非虚基类的构造函数,最后调用派生类的构造函数。4.8-4.11ACCB4.12ConstructorB1.ConstructorB2.ConstructorA.3214.13主食=brea

30、d副食=steak4.140,0,00,1,03,6,94.15ConstructorB1.ConstructorB2.ConstructorB3.ConstructorA.124,34.1644.17(1,2)5,6(6,9)4.18classbase1classbase2classlevel2classbase2classlevel1classtoplevel4.19#includeusingnamespacestd;#includeclasstablepublic:table(intp,intq)i=p;j=q;voidascii(void);protected:inti,j;voidt

31、able:ascii()intk=1;for(;i=j;i+)coutsetw(4)i(char)i;if(k)%12=0)coutn;k+;coutn;classder_table:publictablepublic:der_table(intp,intq,char*m):table(p,q)c=m;voidprint();protected:char*c;voidder_table:print()coutcn;table:ascii();intmain()der_tableob(a,z,ASCIIvalue-char);ob.print();return0;4.20#includeusin

32、gnamespacestd;#includeclassarea_c1protected:doubleheight;doublewidth;public:area_c1(doubler,doubles)height=r;width=s;virtualdoublearea()=0;classrectangle:publicarea_c1public:rectangle(doubler,doubles):area_c1(r,s)virtualdoublearea();doublerectangle:area()returnheight*width;classisosceles:publicarea_

33、c1public:isosceles(doubler,doubles):area_c1(r,s)virtualdoublearea();doubleisosceles:area()return(height*width)/2;intmain()rectangler(10,5);isoscelesi(4,6);area_c1*a;a=&r;cout矩形的面积是:area()endl;a=&i;cout三角形的面积是:return0;4.21#includeusingnamespacestd;#includeclassTimepublic:Time(inth,intm,ints)a

34、rea()endl;hours=h;minutes=m;seconds=s;voiddisplay()cout出生时间:hours时minutes分seconds秒endl;protected:inthours,minutes,seconds;classDatepublic:Date(intm,intd,inty)month=m;day=d;year=y;voiddisplay()cout出生年月:year年month月day日endl;protected:intmonth,day,year;classBirthtime:publicTime,publicDatepublic:Birthtim

35、e(charname,intm,intd,inty,inth,intmi,ints):Time(h,mi,s),Date(m,d,y)strcpy(Childname,name);voidshowName()cout我的名字是:Childnameendl;private:charChildname25;intmain()Birthtimeb(xiaoming,3,6,2012,11,12,42);b.showName();b.Time:display();b.Date:display();return0;4.22#includeusingnamespacestd;#includeclasspe

36、rsonprotected:charnumber25;charname25;public:person(charnum,charna)strcpy(number,num);strcpy(name,na);voidshowName()cout编号:number姓名:name;classstudent:publicpersonprivate:intclassNumber,score;public:student(charnum,charna,intcNumber,intsc):person(num,na)classNumber=cNumber;score=sc;voidshow()showName

37、();cout班号:classNumber成绩:scoreendl;classteacher:publicpersonprivate:chartitle25,department25;public:teacher(charnum,charna,chartit,chardepart):person(num,na)strcpy(title,tit);strcpy(department,depart);voidshow()showName();cout职称:title部门:departmentendl;1. 什么是静态联编什么是动态联编静态联编是指系统在编译时就决定如何实现某一动作。动态联编是指系统

38、在运行时动态实现某一动作。1. 编译时的多态性与运行时的多态性有什么区别他们的实现方式有什么不同2.静态联编支持的多态性称为编译时多态性,也称静态多态性。编译时多态性是通过函数重载和模板实现的。动态联编所支持的多态性称为运行时多态性,也称动态多态性。是通过虚函数来实现的。1. 简述运算符重载规则。a)C+中绝大部分的运算符允许重载。b)C+只能对已有的 C+运算符进行重载。c)运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造完成。应与原有的功能相类似。d)重载不能改变运算符的操作对象的个数。e)重载不能改变运算符原有的优先级。f)不能改变原有的结合特性。g)参数至少应有一个是类

39、对象。h)重载函数可以是普通函数,也可以是类的成员函数,也可以是类的友元函数。i)一般用于类对象的运算符除了赋值运算符都要重载。1. 友元运算符函数和成员运算符函数有什么不同?a)对于双目运算符,成员运算符重载含有一个参数,友元重载含有两个参数;对于单目运算符,成员重载没有参数,友元重载有一个参数。b)双目运算符一般可以被重载为友元或成员。但是如果将一个对象和一个普通类型运算,必须重载为友元。c)调用方式不同。d)一般,双目运算符用友元,单目运算符用成员。如果操作数有隐式类型转换,则必须用友元。1. 什么是虚函数虚函数与函数重载有哪些相同点与不同点2.虚函数就是在基类中被关键字 virtual

40、 说明,并在派生类中重新定义的函数。函数名都相同。重载函数的参数个数或参数类型必须有所不同。虚函数要求函数名,返回类型,参数个数,参数的类型和顺序与基类中的虚函数原型完全相同。1. 什么是纯虚函数什么是抽象类2.纯虚函数是一个在基类中说明的虚函数,它在该基类中没有定义,但要求在它的派生类中根据需要对它进行定义,或仍说明为纯虚函数。如果一个类至少有一个纯虚函数,那么就称这个类为抽象类。7-12DAADCC13.不对,参数个数必须一样。14.7615.Thisisc+book.第一个字符:T第 16 个字符:.第 26 个字符:数组下标超界!16.m=1.5 千米17.#includeusingn

41、amespacestd;classtwoDArrayinta23;public:twoDArray()for(inti=0;i2;i+)for(intj=0;j3;j+)aij=5;twoDArray(intb3)for(inti=0;i2;i+)for(intj=0;j3;j+)aij=bij;voidshow();twoDArrayoperator+(twoDArrayn);twoDArrayoperator-(twoDArrayn);voidtwoDArray:show()for(inti=0;i2;i+)for(intj=0;j3;j+)coutaij;coutendl;twoDArr

42、aytwoDArray:operator+(twoDArrayn)twoDArraytemp;for(inti=0;i2;i+)for(intj=0;j3;j+)temp.aij=aij+n.aij;returntemp;twoDArraytwoDArray:operator-(twoDArrayn)twoDArraytemp;for(inti=0;i2;i+)for(intj=0;j3;j+)temp.aij=aij-n.aij;returntemp;intmain()inta23;for(inti=0;i2;i+)for(intj=0;jaij;twoDArraya1,a2(a),tota

43、l,sub;total=a1+a2;sub=a1-a2;total.show();sub.show();return0;18.#includeusingnamespacestd;classtwoDArrayinta23;public:twoDArray()for(inti=0;i2;i+)for(intj=0;j3;j+)aij=5;twoDArray(intb3)for(inti=0;i2;i+)for(intj=0;j3;j+)aij=bij;voidshow();friendtwoDArrayoperator+(twoDArraym,twoDArrayn);friendtwoDArray

44、operator-(twoDArraym,twoDArrayn);voidtwoDArray:show()for(inti=0;i2;i+)for(intj=0;j3;j+)coutaij;coutendl;twoDArrayoperator+(twoDArraym,twoDArrayn)twoDArraytemp;for(inti=0;i2;i+)for(intj=0;j3;j+)temp.aij=m.aij+n.aij;returntemp;twoDArrayoperator-(twoDArraym,twoDArrayn)twoDArraytemp;for(inti=0;i2;i+)for

45、(intj=0;j3;j+)temp.aij=m.aij-n.aij;returntemp;intmain()inta23;for(inti=0;i2;i+)for(intj=0;jaij;twoDArraya1,a2(a),total,sub;total=a1+a2;sub=a1-a2;total.show();sub.show();return0;19.#includeusingnamespacestd;classcomplexdoublereal,imag;public:complex(doublere,doubleim)real=re;imag=im;friendcomplexoper

46、ator+(complexa,complexb);voidprint();complexoperator+(complexa,complexb)returncomplex(a.real+b.real,a.imag+b.imag);voidcomplex:print()cout(real,imag)endl;intmain()complexc1(2.5,3.7);complexc2(4.2,6.5);complextotal=c1+c2;total.print();return0;20.#includeusingnamespacestd;constdoublePI=3.14;classConta

47、inerprotected:doubler,d;/如果是球形,r 是半径,d 为 0.如果是圆柱体,r 为底面半径,d 为高。如果是正方体,r 为边长,d 为 0。public:Container(doublea,doubleb=0)r=a;d=b;virtualdoubleserface()=0;/计算表面积virtualdoublevolume()=0;/计算体积;classSphere:publicContainerpublic:Sphere(doubler):Container(r)doubleserface();doublevolume();doubleSphere:serface(

48、)return4*PI*r*r;doubleSphere:volume()returnPI*r*r*r;classCylinder:publicContainerpublic:Cylinder(doublea,doubleb):Container(a,b)doubleserface();doublevolume();doubleCylinder:serface()return2*PI*r*d+PI*r*r;doubleCylinder:volume()returnPI*r*r*d;classCube:publicContainerpublic:Cube(doublea):Container(a

49、)doubleserface();doublevolume();doubleCube:serface()return6*r*r;doubleCube:volume()returnr*r*r;7.1C+为什么要有自己的输入输出系统C+的编译系统对数据类型进行严格的检查,凡是类型不正确的数据都不可能通过编译。C+中需要定义众多的用户自定义类型且能够输入输出。7.2C+有哪 4 个预定义的流对象他们分别与什么具体设备相关联标准输入流对象 cin、标准输出流对象 cout、非缓冲型的标准出错流对象 cerr 和缓冲型的标准出错流对象 clog。cin 对应标准输入设备cout 对应标准输出设备cerr

50、 对应标准错误输出设备clog 对应标准错误输出设备7.3.cerr 和 clog 间的区别是?cerr 不经过缓冲区直接显示错误信息。而 clog 存放在缓冲区,缓冲区满或遇上endl 时再输出。7.4C+提供哪两种控制输入输出格式的方法?一种是使用 ios 类中的有关格式控制的流成员函数进行格式控制,另一种是使用称为操纵符的特殊类型的函数控制。7.5C+进行文件输入输出的基本过程是什么?首先创建一个流对象,然后将这个流对象与文件相关联,即打开文件,此时才能进行读写操作,读写操作完成后再关闭这个文件。7.6-7.8BCA7.9#include#includeusingnamespacestd;intfactorial(intn)i

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

当前位置:首页 > 技术资料 > 技术方案

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com