还剩83页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
面向对象程序设计教程课后题答案C++什么是面向对象程序设计面向对象程序设计是一种新的程序设计范型.这种范型的主要特征是程序二对象+消息面向对象程序的基本元素是对象主要结构特点是第一,程序一般由类的定义和类的使用两部分组成;第二,程序中的一切操作都是通过向对象发送消息来实现的什么是对象什么是类对象与类之间的关系是什么对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一■体类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述上面这个程序,初看应该输出T2is0但是实际上,得出T2is2如果把#def ine换成const,则可以输出想要的结果用动态分配空间的方法,计算Fibonacci数列的前20项,并存储到动态分配的空间中心#i ncIude iostreamus i ng namespace std;i nt ma i n i nt*p i=new i nt
[20];*pi=1;pi
[1]=1;for int i=2;i20;i++pi[i]=pi[i-2]+pi[i-1];return0;重载sroot函数,输出一个数的二次方根#include iostreamusing namespace std;doubIe srootintnumreturn doubIesqrtdoubIenum;doubIe srootIong numreturndoubIesqrtdoubIe num;doubIe srootdoubIe numreturndoubIesqrtnum;i ntma i n return0;心解决百钱问题将一元人民币换成
1、
2、5分的硬币,有多少种换法#i ncIudeiostream us i ng namespace std;i ntma i n intnum=0;4◎书DefauIt constructorcaI Ied.Default constructorcaI Ied.Construcotor:a=1,b=2Construcotor:a=3,b=4Construcotor:a=5,b=6Con.Copy con.default.Copy con.A=5B二14A二9B二145,7Construct i ngConstruct i ngA=5B=15A=10B=15Destruct i ngDestruct i ngvoid pintStu;函数只有声明,没有定义age是私有成员,不能用对象直接调用void pr i ntStu和void setSnoi nts没有加限定符Student::vo id setAgei nt a在类中没有声明构造函数不能定义为私有否则无法创建对象下面是一个计算器类的定义,请完成该类成员函数的实现cI asscounter pub I ic:counter i nt number;void i ncrement0;电电电电14代«;电修改,通过对象指针访问对象数组,使程序以相反的顺序显示每个对象数组元素的qu*pr i ce值电cI assbookpr i vate:int qu,price;pub lie:book i nt qu;i ntmu11;book::book int qif q1II q5e Isequ=q;pr ice=10*qu;i nt book::mu11return qu*price;i ntma in book books
[5]={1,2,3,4,5};book*p=books;P+二4;for int i=0;i5;i++cout p-mu110««-p;return0;电构建一个类Stock,含字符数组stockcode□及整型数组成员quan、双精度型数据成员priceo构造函数含3个参数字符数组na口及q、p当定义Stocko的类对象时,将对象的第一个字符串参数赋给数据成员stockcode,第2和第3个参数分别赋给quan、price未设置第2和第3个参数时,quan的值为1000,pr ice的值为.成员函数pr int没有形参,需使用this指针,显示对象数据成员的内容编写程序显示对象数据成员的值电#i ncIudei ostreamusi ng namespace std;cI assStock pr i vate:类和对象之间的关系是抽象和具体的关系类是多个对象进行综合抽象的结果,一个对象是类的一个实例现实世界中的对象有哪些特征请举例说明现实世界中的对象具有以下特征1每一个对象必须有一个名字以区别于其他对象;2用属性来描述对象的某些特征;3有一组操作,每组操作决定对象的一种行为;4对象的行为可以分为两类一类是作用于自身的行为,另一类是作用于其他对象的行为例如一个教师是一个对象每个教师对象有自己的名字来和别的教师区别教师具有编号,姓名,年龄,职称,专业等属性教师拥有走路,吃饭,授课等行为操作走路,吃饭是作用于自身的行为,授课是作用于其他对象的行为什么是消息消息具有什么性质一个对象向另一个对象发出的请求成为“消息”char stockcode
[25];int quan;doubIe price;pub Iic:Stock char na[],int q=1000,double p=;Stock char na[];void pr int;);Stock::Stock char na[],i ntq=1000,doubIe p=strcpy stockcode,na;quan=q;price=p;void Stock::pri nt coutstockcode:th is-stockcodequan:th is-quan«««««price:th is-pri ce end I;««i ntma in Stock stockl600001,3000,;Stockstock2600002;0;0;return0;编写一个程序,已有若干学生的数据,包括学号、姓名、成绩,要求输出这些学生的数据并计算出学生人数和平均成绩要求将学生人数和总成绩用静态数据成员表示电#i ncIudeiostreamus i ng namespace std;cI assstudentpr ivate:char name
[25],studentNo
[10];int score;static int sum;static i nt totalScore;pub Iic:student charna[],char stuNo[],i ntsc;void show0;);static void showTotaI;student::student charna口,char stuNo[],i ntscstrcpy name,na;strcpy studentNo,stuNo;score-sc;++sum;totaI Score+=sc;vo id student::show0cout姓名:name end I;«««cout”学号:VI studentNoend I;«««cout成绩score end I;«««void student::showTotal cout总人数sum end I;«««cout”平均成绩“doub I e tota I Score/sum end I;«««int student::sum=0;i ntstudent::totaI Score=0;i ntma in student s1“张无忌,H111254,75;student s2“李莫愁“,254114”,60;students3(“小龙女”,112587”,88);0;0;0;student::showTota I;return0;有哪几种继承方式每种方式的派生类对基类成员的继承性如何公有继承,私有继承和保护继承基类的私有成员,无论哪种继承方式都不能访问公有继承不改变基类的公有和保护成员的访问限制私有继承将基类的公有和保护成员都变成私有保护继承将基类的公有和保护成员都变成保护派生类能否直接访问基类的私有成员若否,应如何实现不能可以在基类里添加一个公有成员函数来访问私有成员,派生类就能继承这个公有成员函数,实现对基类私有成员的访问保护成员有哪些特性保护成员以公有方式或私有方式继承后的访问特性如何保护成员只能被本类或本类的派生类所访问,在类或派生类外是不能被访问的后面一问见第一题的答案派生类构造函数和析构函数的执行顺序是怎样的构造函数是先执行父类的构造函数,再执行类中其他类对象的构造函数,再执行本类的构造函数如果同级有多个构造函数,则按声明顺序执行析构函数与构造函数的执行顺序刚好相反派生类构造函数和析构函数的构造规则是怎样的派生类名(参数总表)基类名(参数总表)派生类新增数据成员的初始化语句)派生类中的析构函数与基类无关什么是多继承多继承时,构造函数与析构函数的执行顺序是怎样的多继承是指一个类同时继承自多个不同的基类执行顺序同在类的派生中为何要引入虚基类虚基类构造函数的调用顺序是如何规定的如果一个类有多个直接基类,而这些直接基类又有一个共同的基类,则在最底层的派生类中会保留这个简介的共同基类数据成员的多份同名成员在访问这些同名成员的时候,会产生二义性为了解决二义性,引入了虚基类1如果虚基类中定义有带形参的构造函数,并且没有定义默认形式的构造函数,则整个继承结构中,所有直接或间接的派生类都必须在构造函数的成员初始化表中列出对虚基类构造函数的调用,以初始化在虚基类中定义的数据成员2建立一个对象时,如果这个对象中含有从虚基类继承来的成员,则虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的该派生类的其他基类对虚基类构造函数的调用都自动被忽略3若同一层次中同时包含虚基类和非虚基类,应先调用虚基类的构造函数,再调用非虚基类的构造函数,最后调用派生类的构造函数ACCBConstructor B
1.Constructor B
2.Constructor A.主食二bread副食二steak0,0,00,1,03,6,9Constructor B
1.Constructor B
2.Constructor B
3.Constructor A.消息具有以下3个性质:1同一个对象可以接收不同形式的多个消息,做出不同的相应;2相同形式的消息可以传递给不同的对象,所做出的响应可以是不同的;3对消息的响应并不是必须的,对象可以响应消息,也可以不响应什么是抽象和封装请举例说明抽象是将有关事物的共性归纳、集中的过程例如把所有具有大学生学籍的人归为一类,成为“大学生”,这就是一个抽象封装是指把数据和实现操作的代码集中起来放在对象内部,并尽可能隐藏对象的内部细节例如每一台洗衣机都有出厂日期、机器编号等属性,也有启动、暂停、选择等操作人们在使用洗衣机的时候只需要按下对应的按钮,而不用关心具体的内部实现这就是封装24,341,25,66,9cI assbaselcI assbase2cI assI eve12cI assbase2cI assI eve11cI asstop Ieve I电#i ncIudeiostreamus i ng namespace std;#i ncIudeiomanipcI asstab Iepub I ic:tab Iei ntp,intq1=P;j=q;vo id asci ivo id;protected:int i,j;1;void table::asci ii ntk=1;for;i=j;i++cout setw4ichar i;««««if k%12=0cout\n;«k++;cout\rT;«cI assder_table:publ ictab Iepub Iic:der_tableint p,i ntq,char*m:tab Iep,qc=m;void print;protected:char*c;;void der_tabIe::pr intcoutc n\nH;««0;table::asci ii ntma in der_tabIe oba,z,ASCI IvaIuechar;0;return0;#i ncIudei ostreamusi ng namespace std;#i ncIudeiomanip cI ass area_c1protected:doubIe height;doubIe width;pub I ic:area_c1doubIe r,doubIe she ight=r;width=s;vi rtuaI doubIe area0=0;);cI assrectangle:pub Ii c area_c1pub Iic:rectang Iedouble r,doub Ies:area_c1r,s{}vi rtuaIdoubIe area0;;doubIe rectangle::areareturn height*width;cI assi sosceIes:pub I icarea_c1pub Iic:i sosce I esdoub Ie r,doub Ies:area_c1r,s{}vi rtuaIdoubIearea0;doub Iei sosceI es::area returnheight*width/2;i ntma in rectangler10,5;isosceIesi4,6;area_c1*a;a=r;cout矩形的面积是«a-areaend I;««a二i;cout”三角形的面积是“«a-areaend I;««return0;#i ncIudeiostream using namespace std;#i ncIudeiomanip cI ass TimeTimei nth,i ntm,i ntspub Iic:hours=h;minutes=m;seconds=s;void di spIay0cout出生时间«hours时«minutes分,,«seconds秒«««««end I;protected:int hours,minutes,seconds;1;cI assDatepub Iic:Date i ntm,i ntd,i ntymonth=m;什么是继承请举例说明继承就是允许派生类使用基类的数据和操作,同时,派生类还可以增加新的操作和数据例如哺乳动物是一种热血、有毛发、用奶哺育幼崽的动物;狗是有犬牙、食肉、特定的骨骼结构、群居的哺乳动物狗就继承了哺乳动物若类之间具有继承关系,则他们之间具有什么特征若类之间具有继承关系,则他们之间具有下列几个特征1)类间具有共享特征(包括数据和操作代码的共享);2)类间具有差别或新增部分(包括非共享的数据和操作代码);3)类具有层次结构什么是单继承、多继承请举例说明单继承是指每个派生类只直接继承了一个基类的特征0例如狗继承自哺乳动物day=d;year=y;)0vo id di spIay(cout”出生年月:«year年«month月”day日«end«««««I;)protected:1nt month,day,year;1;cI assBi rtht ime:pub Iic Time,pub Iic Datepub Iic:Bi rthtime char name[],i ntm,i ntd,int y,i nth,i ntmi,ints:Time h,mi,s,Date m,d,ystrcpy Chi Idname,name;void showName0cout我的名字是Chi IdnameendI;«««1pr ivate:char ChiIdname
[25];;i ntma in Birthtimeb uxiaoming\3,6,2012,11,12,42;0;0;::display0;::displayreturn0;#i ncIudeiostream using namespace std;#i ncIudeiomanip cI ass person protected:char number
[25];charname
[25];pub Iic:person charnum[],charna[]strcpynumber,num;strcpy name,na;0void showNamecout编号«number姓名:name;«««1;cI assstudent:pub Iicperson private:int cIassNumber,score;pub Iic:student charnum[],charna口,i nteNumber,sc:personnum,i ntnacIassNumber=eNumber;score=sc;void show0scoreshowName;cout班号c IassNumber成绩«endI;«««);cI assteacher:pubIicpersonprivate:char title
[25],department
[25];pubIic:teacher charnum[],charna[],char tit[],char depart[]:personnum,nastrcpy title,tit;strcpy department,depart;void show0showName;cout职称title部门”«department«««第五章习题C++
1.什么是静态联编什么是动态联编静态联编是指系统在编译时就决定如何实现某一动作动态联编是指系统在运行时动态实现某一动作
1.编译时的多态性与运行时的多态性有什么区别他们的实现方式有什么不同静态联编支持的多态性称为编译时多态性,也称静态多态性编译时多态性是通过函数重载和模板实现的动态联编所支持的多态性称为运行时多态性,也称动态多态性是通过虚函数来实现的
1.简述运算符重载规则b C++只能对已有的C++运算符进行重载c运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造完成应与原有的功能相类似d重载不能改变运算符的操作对象的个数e重载不能改变运算符原有的优先级f不能改变原有的结合特性g参数至少应有一个是类对象h重载函数可以是普通函数,也可以是类的成员函数,也可以是类的友元函数i一般用于类对象的运算符除了赋值运算符都要重载
1.友元运算符函数和成员运算符函数有什么不同a对于双目运算符,成员运算符重载含有一个参数,友元重载含有两个参数;对于单目运算符,成员重载没有参数,友元重载有一个参数b双目运算符一般可以被重载为友元或成员但是如果将一个对象和一个普通类型运算,必须重载为友元c调用方式不同d一般,双目运算符用友元,单目运算符用成员如果操作数有隐式类型转换,则必须用友元
1.什么是虚函数虚函数与函数重载有哪些相同点与不同点虚函数就是在基类中被关键字virtual说明,并在派生类中重新定义的函数函数名都相同重载函数的参数个数或参数类型必须有所不同虚函数要求函数名,返回类型,参数个数,参数的类型和顺序与基类中的虚函数原型完全相同
1.什么是纯虚函数什么是抽象类纯虚函数是一个在基类中说明的虚函数,它在该基类中没有定义,但要求在它的派生类中根据需要对它进行定义,或仍说明为纯虚函数如果一个类至少有一个纯虚函数,那么就称这个类为抽象类7-12DAADCC
13.不对,参数个数必须一样76This isc++book.第一个字符T第16个字符.第26个字符数组下标超界!m二千米多继承是指多个基类派生出一个派生类的继承关系比如玩具车同时继承自玩具和车什么是多态请举例说明多态是指不同的对象收到相同的消息时执行不同的操作例如,有一个窗口类对象,还有一个棋子类对象当我们发出“移动”消息时,两个对象的行为不同面向对象程序设计的主要优点是什么
1.可提高程序的重用性;
2.可控制程序的复杂性;3,可改善程序的可维护性;
4.能够更好地支持大型程序设计;5,增强了计算机处理信息的范围;能够很好地适应新的硬件环境简述C++的主要特点
17.#i ncIudeiostreamus ing namespace std;cI asstwoDArrayi nta
[2]
[3];pub Iic:twoDArray0for inti=0;i2;i++for intj=0;j3;j++a[i][j]=5;twoDAr rayi ntb[]
[3]for intj=0;j3;j++a[i][j]二b[i][j];1void show0;twoDArray operator+twoDArray n;twoDArray operator-twoDArray n;;void twoDArray::showfor inti=0;i2;i++for intj=0;j3;j++cout a[i][j];«cout endI;«twoDArray twoDArray::operator+twoDArray ntwoDArray temp;for inti=0;i2;i++for intj=0;j3;j++[i][j]=a[i][j]+return temp;twoDArray twoDArray::operator-twoDArray ntwoDArray temp;for intj=0;j3;j++return temp;i ntma in int a
[2]
[3];for inti=0;i2;i++for intj=0;j3;j++cin a[i][j];»twoDArray a1,a2a,totaI,sub;totaI=a1+a2;sub=a1-a2;0;0;return0;电电#i ncIudeiostreamus ing namespace std;cI asstwoDArrayint a
[2]
[3];pub Iic:twoDAr rayfor inti=0;i2;i++a[i][j]=5;twoDArray i ntb[]
[3]for inti=0;i2;i++for intj=0;j3;j++a[i][j]=b[i][j];1void show0;fr iendtwoDArray operator+twoDArray m,twoDArray n;fr iendtwoDArray operator-twoDArray m,twoDArray n;;void twoDArray::showfor inti=0;i2;i++for intj=0;j3;j++cout a[i][j];«cout endI;«twoDArray operator+twoDArray m,twoDArray ntwoDArray temp;for inti=0;i2;i++for intj=0;j3;j++[i][j]二[i][j]+return temp;twoDArray operator-twoDArray m,twoDArray ntwoDArray temp;for inti=0;i2;i++for intj=0;j3;j++[i][j]=[i][j]-return temp;1i ntma in inta
[2]
[3];for inti=0;i2;i++for intj=0;j3;j++cin a[i][j];»twoDArray a1,a2a,totaI,sub;totaI=a1+a2;sub=a1-a2;0;0;return0;o#i ncIudeiostreamus ingnamespace std;cI asscomp I exdoubIe reaI,imag;pub Iic:rea Ireimag=im;fr i end comp I ex operator+comp Iex a,comp Iex b;void print;;comp Iex operator+comp Iex a,comp Iex breturn comp Iex+,+;void complex::print0cout real«丁’«imag“endI;««««2保持了C的简洁、高效和接近汇编语言等特点,并对C的功能作了不少扩充用C++编写的程序比C更安全,可读性更好,代码结构更为合理3程序质量高4增加了面向对象机制#i ncIudeiostreamus ingnamespace std;i ntma in1inta,b,d,min;cout Entertwo numbers:n;«cin ab;»»a;i ntma incomp Iexd,;compIex c2,;compIex totaI=d+c2;0;return0;
20.电#i ncIudeiostreamus ingnamespacestd;cIassConta iner protected:double r,d;如果是圆柱体,r为底面半径,d为高如果是正方体,r为边长,d为0pub Iic:Conta iner doubIea,doubIe b=0r=a;d=b;vi rtuaIdoubIeserface=0;cerr和cI og间的区别是cerr不经过缓冲区直接显示错误信息而clog存放在缓冲区,缓冲区满或遇上endl时再输出C++提供哪两种控制输入输出格式的方法一种是使用ios类中的有关格式控制的流成员函数进行格式控制,另一种是使用称为操纵符的特殊类型的函数控制C++进行文件输入输出的基本过程是什么首先创建一个流对象,然后将这个流对象与文件相关联,即打开文件,此时才能进行读写操作,读写操作完成后再关闭这个文件BCA电#i ncIudei ostream#i ncIudeioman ipusingnamespacestd;i ntfactor i aIi ntnifn==0||n==1return n;return factoriaIn-1*n;i ntma in for i nti=1;i=9;i++cout setw5factor iali;««if i%3=0cout endI;«return0;#i ncIudeiostream#i ncIudeiomanipus ingnamespacestd;i ntma in for inti=1;i〈二7;i++cout setw16-i;«for intj=1;j=2*i-1;j++cout A;«cout endI;«return0;#i ncIudeiostream#i ncIudeiomanip usingnamespacestd;cIassmatr i xpr ivate:i ntdata
[2]
[3];pub lie:matr i x{}f riendostream operatorostream,matr ix;«f riend i stream operator i stream,matr ix;»fr iend matr ixoperator+matr ix,matrix;);ostream operatorostream os,matr ix a«for inti=0;i2;i++for intj=0;j3;j++os[i][j]««os endI;«return os;i streamoperatoristreamin,matr ix a»cout请输入一个2行3列矩阵«endl;«for inti=0;i2;i++for intj=0;j3;j++in[i][j];»1return in;matr ixoperator+matr ix a,matr ix bmatrixtemp;for inti=0;i2;i++for intj=0;j3;j++[i][j]=[i][j]+[i][j];1return temp;1intma in0matrix ml,m2,totaI;cin mlm2;»»totaI=ml+m2;cout totaI;«return0;Ei#i ncIudeiostream#i ncIudefstream usingnamespacestd;intma in fstreamfout nn,ios::out;for d=2;dmin;d++if a%d=0b%d=0break;if d==mincout Nocommon denominatorsendI;««return0;cout Thelowest commondenominator isd endI;return0;«««1有效cout”文件打开失败!“«endl;«return1;fout Shenfa zhan000001\n;«fout shanghai qiche600104\n;«fout Guangju nengyuan000096;«0;return0;电电#i ncIudeiostream#i ncIudefstream usingnamespacestd;intma in charstr
[30];fstream in二i os::in;i f!i ncout打开文件错误!\n;«abort;instr str;»»for inti=0;i30;i++if str[i]!=0str[i]1A1str[i]+=CA一匕1;fstream outios::out;i floutcout打开文件失败!\n;«0;abort1out str;»0;0;return0;#i ncIudeiostream#incIude fstreamusingnamespacestd;intma in charstr
[30];fstream in二ios::in;if!i ncout打开文件错误!\n;abort;«instr str;»»for inti=0;i30;i++if str[i]!=0str[i]Astr[i]+二A-a;1fstream outios::app;i floutcout打开文件失败!\n;«abort;out str;»0;0;return0;不会#i ncIudeiostream#i ncIude#i ncIudeusingnamespacestd;cIassorderpr ivate:int order ID;int buyer ID;intIi stcount;static int ordercount;pubIic:order buyerperson,bookb[],intbookNumber ordercount++;order ID=ordercount;buyer ID=;Iistcount=bookNumber;forinti=0;ibookNumber;i++order Iist[i]=b[i].book_lD;voidshow0cout订单编号orderlD”\n购书人编号:buyerID”\n«««««购书数量«Iistcount endI;«forinti=0;iIi stcount;i++cout书号orderIist[i]endI;;«««));intorder::ordercount=0;intma in0(book*c
[20];book d(7-302-0145214-6,”C程序设计,“谭浩强,“清华,25);book c2(7-302-0145214-7,C++程序设计,谭浩强,清华”,28);c
[1]=c1;c
[2]=c2;layfolk b1(林晓茶,1,“北京”,0);order ord(b1,c,2);0;return0;没有函数声明;函数定义没有写返回值类型1等价,函数声明可以省略参数的名字2不等价,第二个的函数定义不能省略参数的名字CDAABACBDCDC1011020举例说明可以使用const替代#define以消除#define的不安全性电#i ncIudeiostreamus ingnamespacestd;intma in1nta=1;#def ine T1a+a#define T2T1-T1cout UT2is nT2endl;«««return0;。
个人认证
优秀文档
获得点赞 0