还剩24页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
一选择题(共45题)1.对类的构造函数和析构函数描述正确的是() A. 构造函数可以重载,析构函数不能重载√B. 构造函数不能重载,析构函数可以重载C. 构造函数可以重载,析构函数也可以重载D. 构造函数不能重载,析构函数也不能重载2.继承具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员A)规律性B.传递性√C.重复性D.多样性3.假设OneClass为一个类,则该类的复制初始化构造函数的声明语句为() A.OneClassOneClassp;B.OneClassOneClassp;C.OneClassOneClassp;√D.OneClassOneClass*p;4.对于结构中定义的成员,其默认的访问权限为() A.publicB.protectedC.privateD.static5.下面对静态数据成员的描述中,不正确的是() A.静态数据成员可以在类体内进行初始化√B.静态数据成员不可以在类体内进行初始化C.静态数据成员能受private控制符的作用D.静态数据成员调用前必须初始
6.C++中的类有两种用法一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过( )派生了新的类 A.复用B.继承√C.封装D.引用
7.假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为()A.xaB.x[a]C.x-aD.x.a√
9.对于一个类的构造函数,其函数名与类名A.完全相同√B.基本相同C.不相同D.无关系
10.一个类的构造函数通常被定义为该类的成员A.公有√B.保护C.私有D.友元
11.一个类的析构函数通常被定义为该类的成员A.私有B.保护C.公有√D.友元
12.一个类的静态数据成员所表示属性A.是类的或对象的属性B.只是对象的属性C.只是类的属性√D.类和友元的属性
13.类的析构函数的作用是()A.一般成员函数B.类的初始化C.对象初始化D.删除对象之前的善后工作√
14.下列对基类和派生类关系的描述中,错误的是()A.派生类是基类的具体化B.派生类是基类的子集√C.派生类是基类定义的延续D.派生类是基类的组合
15.下列对派生类的描述中,错误的是()A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的缺省继承方式是privateD.派生类只继承了基类的公有成员和保护成员√
16.下列对继承的描述中,错误的是()A.析构函数不能被继承B.派生类也是基类的组合C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类保持不变√
17.派生类的对象对它的基类成员中()是可以访问的A.公有继承的公有成员√B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员
18.下列说法错误的是()A.公有继承的基类中的public成员在派生类中仍是public的B.公有继承的基类中的private成员在派生类中仍是private的√C.私有继承的基类中的public成员在派生类中仍是private的D.保护继承的基类中的public成员在派生类中仍是protected的
19.下面叙述错误的是()A.基类的protected成员在派生类中仍然是protected√B.基类的protected成员在public派生类中仍然是protected的C.基类的protected成员在private派生类中是private的D.基类的protected成员不能被派生类的对象访问20.设置虚基类的声明中,正确的是() A.简化程序B.消除二义性√C.提高运行效率D.减少目标代码21.关于虚函数的描述中,正确的是() A.虚函数是一个静态成员函数B.虚函数是一个非成员函数C.虚函数即可以在函数说明定义,也可以在函数实现时定义D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型√22.下列描述中,()是抽象类的特征 A.可以说明虚函数B.可以进行构造函数重载C.可以定义友元函数D.不能说明其对象√
23.静态数据成员的初始化是在()中进行的A.构造函数B.任何成员函数C.所属类D.全局区√
24.当将一个类A或函数f说明为另一个类B的友元后,类A或函数f能够直接访问类B的()A.只能是公有成员B.只能是保护成员C.只能是除私有成员之外的任何成员D.具有任何权限的成员√
25.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是()A.作为友元函数重载的1元运算符B.作为成员函数重载的1元运算符√C.作为友元函数重载的2元运算符D.作为成员函数重载的2元运算符
26.关于运算符重载,下列说法正确的是()A.重载时,运算符的优先级可以改变B.重载时,运算符的结合性可以改变C.重载时,运算符的功能可以改变√D.重载时,运算符的操作数个数可以改变
27.从一个基类派生出的各个类的对象之间A.共享所有数据成员,每个对象还包含基类的所有属性B.共享部分数据成员,每个对象还包含基类的所有属性C.不共享任何数据成员,但每个对象还包含基类的所有属性D.共享部分数据成员和函数成员√
28.C++的继承性允许派生类继承基类的()A.部分特性,并允许增加新的特性或重定义基类的特性√B.部分特性,但不允许增加新的特性或重定义基类的特性C.所有特性,并允许增加新的特性或重定义基类的特性D.所有特性,但不允许增加新的特性或重定义基类的特性
29.派生类的成员函数可以直接访问基类的()成员A.所有B.公有和保护√C.保护和私有D.私有
30.当派生类中有和基类一样名字的成员时,一般来说,()A.将产生二义性B.派生类的同名成员将覆盖基类的成员√C.是不能允许的D.基类的同名成员将覆盖派生类的成员31.关于纯虚函数和抽象类的描述中,错误的是()A.纯虚函数是一种特殊的虚函数,它没有具体的实现B.抽象类是指具体纯虚函数的类C.一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类√D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出32.如果一个类至少有一个纯虚函数,那么就称该类为()A.抽象类√B.虚函数C.派生类D.以上都不对33.要实现动态联编,必须通过()调用虚函数A.对象指针√B.成员名限定C.对象名D.派生类名
34.以下()成员函数表示虚函数A.virtualintvfint;B.voidvfint=0;C.virtualvoidvf=0;D.virtualvoidvfint{};√
40.下面描述中,正确的是()A.virtual可以用来声明虚函数√B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C.即使基类的构造函数没有参数,派生类也必须建立构造函数D.静态数据成员可以通过成员初始化列表来初始化
35.在成员函数中进行双目运算符重载时,其参数表中应带有()个参数A.0B.1√C.2D.
336.在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是()A.该运算符是一个单目运算符B.该运算符函数有一个隐含的参数thisC.该运算符函数是类的成员函数D.该运算符函数是类的友元函数√
37.下面对于友元函数描述正确的是()A.友元函数的实现必须在类的内部定义B.友元函数是类的成员C.友元函数破坏了类的封装性和隐藏性√D.友元函数不能访问类的私有成员
38.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该当成员的访问权限定义为()A.public√B.protectedC.privateD.ststic
39.下面对静态数据成员的描述中,正确的是()A.静态数据成员是类的所有对象共享的数据√B.类的每一个对象都有自己的静态数据成员C.类的不同对象有不同的静态数据成员值D.静态数据成员不能通过类的对象调用
40.C++类体系中,不能被派生类继承的有()A.构造函数√B.虚函数C.静态成员函数D.赋值操作函数41下列虚基类的声明中,正确的是()A.classvirtualB:publicAB.virtualclassB:publicAC.classB:publicAvirtualD.classB:virtualpublicA√42在下面的表达式中,不表示虚继承的是()A.virtualpublicB.publicvirtualC.public√D.virtual
43.下列关于动态联编的描述中,错误的是()A.动态联编是以虚函数为基础B.动态联编是运行时确定所调用的函数代码的C.动态联编调用函数操作是指向对象的指针或对象引用D.动态联编是在编译时确定操作函数的√
44.下面4个选项中,()是用来声明虚函数的A.virtual√B.publicC.usingD.false
45.编译时的多态性可以通过使用获得A A.虚函数和指针√B.重载函数和析构函数C.虚函数和对象D.虚函数和引用二填空题(共33题)
1.重载插入运算符时,其运算符函数的返回值类型应当是ostream
2.派生类可以定义其基类中不具备的数据和操作
3.对象将其大部分实现细节隐藏起来,这种机制称为封闭
4.建立类和类的对象时,系统对类不分配内存,系统对对象分配内存
5.基类和派生类的关系称为继承和派生
6.当保护继承时,基类的公有或保护成员在派生类中成为保护成员,派生类对象不能直接访问基类的任何成员
7.C++支持两种多态性编译时的多态性(重载)和运行时的多态性(虚函数)、
8.在C++中定义类时,通常是利用变量描述对象的“特征”;利用函数描述对象的“行为”
9.假定用户为类AB定义了一个构造函数ABintaa,char*bb=NULL aaa,bbb{}”,则该类中至少包含有2个数据成员
10.类是对象的抽象 ;而对象则是类的具体实例
11.如果不做特殊说明,类成员的默认访问权限是私有;结构成员的默认访问权限是公有
12.在定义对象的同时初始化其成员变量,需要利用构造函数,用于初始化变量的值可以是固定的常量,也可以通过参数获得
13.在私有继承关系下,基类的公有成员和保护成员将成为派生类中的私有成员,它们只能由派生类的成员函数来访问;基类的私有成员将成为派生类中的不可访问的成员
14.在保护继承中,基类中的公有成员、保护成员是可见的
15.面向对象方法构造的系统,其基本单位是对象
16.生成一个派生类对象时,先调用基类的构造函数,然后调用派生类的构造函数
17.AAoperator+AAx表示为运算符+重载
18.若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上类名和两个冒号分隔符
19.若采用x.abcy表达式调用一个成员函数,在成员函数中使用的*this就代表了类外的x对象
20.假定用户没有给一个名为AB的类定义析构函数,则系统为其定义的析构函数为~AB{}
21.类的成员按访问权限可分为三类公有、私有、保护22.在一个类中定义复制构造函数的目的,是为了当利用该类的一个对象初始化另一个对象时,能够避免这两个对象的同一指针同时指向同一块地址
23.假定AB为一个类,则执行“ABa
[10];”语句时,系统自动调用该类构造函数的次数为
1024.假定要把aa定义为AB类中的一个常量整数型数据成员,则定义语句为constintaa;25.假定AB为一个类,则该类的复制构造函数的函数头为ABAB26.假定AB为一个类,该类中含有一个指向动态数组空间的指针成员pa,则在该类的析构函数中应该包含有一条deletepa语句
27.静态成员函数只能访问类的静态数据成员,非静态成员函数访问类的非静态数据成员
28.一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明必须在函数名前加上friend的限定
29.一个单目运算符作为类的成员函数重载时有0个参数;如果作为友元函数重载,则有1个参数
30.若多个基类及其派生类中都定义了同名函数成员,要访问相应函数时,就需要在函数名前加上基类名和类区分符
31.若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以virtual的方式直接继承它
32.引进虚基类的根本目的是为了消除二义性
33.在每个成员函数中,隐含的第一个参数的参数名为this指针三写出下列程序的运行结果
1.1#includeiostream.hstructab{chara
[5];floatb;};voidmain{abx={Li
89.6};coutx.a\tx.bendl;}
2.2#includeiostream.hstructab{chara;floatb;};voidfaby{y.a=W;y.b=
90.5;}voidmain{abx={L
89.5};fx;coutx.a\tx.bendl;}
3.3#includeiostream.h#includestring.hclassA{chara;public:Achar*s{a=newchar[strlens+1];strcpyas;coutaendl;}~A{delete[]a;coutDestructor!endl;}};voidmain{AxLiMing; A yZhang; }
4.4#includeiostream.hintn=0;classA{inta;public:Aintaa=0{a=aa;n++;}~A{n--;coutnendl;}voidshow{coutnendl;}};voidmain{Aa;a.show;{Ax
[2];x
[1].show;}a.show;}
5.5#includeiostream.hclassA{intab; public:A{a=b=0;coutabendl;}Aintaaintbb{a=aa;b=bb;coutabendl;}};voidmain{Axy105;}
6.6#includeiostream.hclassBB{intab;public:BBinti=0intj=1{a=i;b=j;}BBoperator+BBc{BBd;d.a=a+c.a*10;d.b=b+c.b*10;returnd;}BBoperator-BBc{BBd;d.a=a*c.a;d.b=b*c.b;returnd;}voidshow{coutabendl;}};voidmain{BBx26y55z;z=x+y;z.show;z=x-y;z.show;}
7.7#includeiostream.hclassEX{intxy;public:EXinti=0intj=1{x=i;y=j;}EXoperator*EXz{EXd;d.x=x*z.x;d.y=y*z.y;returnd;}EXoperator/EXc{EXd;d.x=x-c.x;d.y=y-c.y;returnd;}voidshow{coutabendl;}};voidmain{EXa3010b25c;c=a*b;c.show;c=a/b;c.show;}
8.
(8)#includeiostream.hclassPoint{intxy;public:Point{x=1;y=1;}~Point{coutPointxyisdeleted.endl;}};voidmain{Pointa;}
9.
(9)#includeiostream.h#includeconio.hintcount=0;classPoint{intxy;public:Point{x=1;y=1;count++;}~Point{count--;}};voiddisplay{coutTherearecountpoints.endl;}voidmain{Pointa;display;{Pointb
[5];display;}display;}
10.
(10)#includeiostream.hclassEX1{intab; public:EX1{a=b=1;coutabendl;}EX1intaaintbb=100{a=aa;b=bb;coutabendl;}};voidmain{EX1xy102;EX1z200;}
11.11#includeiostream.h#includeconio.hclassCsample{inti;public:Csample{coutconstructor1endl;i=0;}Csampleintval{coutConstructor2endl;i=val;}voidDisplay{couti=iendl;}~Csample{coutDestructorendl;}};voidmain{Csampleab10;a.Display;b.Display;}
12.12#includeiostream.hclassCsample{private:inti;staticintk;public:Csample;voidDisplay;};intCsample::k=0;Csample::Csample{i=0;k++;}voidCsample::Display{couti=ik=kendl;}voidmain{Csampleab;a.Display;b.Display;}
13.13#includeiostream.h#includestring.hstructA{charc
[20];floatf;};voidfAt{strcpyt.c”MALIANG”;t.f=
70.5;}voidmain{Az={“LIMING”
77.5};fz;coutz.c\tz.fendl;}
14.
(14)#includeiostream.hclassCsample{inti;public:Csample;voidDisplay;~Csample;};Csample::Csample{coutConstructor;i=0;}voidCsample::Display{couti=i;}Csample::~Csample{coutDestructorendl;}voidmain{Csamplea;a.Display;}
15.
(15)#includeiostream.hclassbase{public:voidshow{cout调用基类函数show.\n;}};classderived:publicbase{public:voidshow{cout调用派生类函数show.\n;}};voidmain{basea1;a
1.show;deriveda2;a
2.show;}
16.
(16)#includeiostream.hclassROOT{public:intsmall;ROOTintn=2{small=n;}voidshowsmall{coutsmall=smallendl;}};classCder1:publicROOT{public:Cder1intm:ROOTm{}};classCder2:publicROOT{public:intsmall;Cder2intn=0{small=n;}};voidmain{ROOTA;Cder1bb3;Cder2cc;A.showsmall;bb.showsmall;cc.showsmall;}
17.
17.#includeiostream.h#includestring.hclassCD{char*a;charb
[20];public:CD{a=newchar
[10];strcpya喂,;strcpyb你好!;}voidInitchar*aachar*bb{a=newchar[strlenaa+1];strcpyaaa;strcpybbb;}voidOutput{coutabendl;}};voidmain{CDdxdy;dx.Output;dy.Init中国北京2008;dy.Output;}
18.
18.#includeiostream.hclassA{inta;public:Aintaa=0:aaa{couta;}~A{cout对象被删除\n;}};voidmain{A*p;Ax
[2]={1020}y=40;coutendl;p=newA
[1];coutendl;delete[]p;coutendl;}
19.
19.#includeiostream.hclassA{inta
[10];intn;public:Aintaa[]intnn:nnn{forinti=0;in;i++a[i]=aa[i];}intGetinti{returna[i];}intSumAintn{ints=0;forintj=0;jn;j++s+=a[j];returns;}};voidmain{inta[]={112358};Axa3ya4;intd=1;forinti=0;i3;i++d*=x.Geti;intf=y.SumA4;coutd=dendl;coutf=fendl;}
20.
20.#includeiostream.hclassBB{intab;public:BBinti=0intj=1{a=i;b=j;}BBoperator+BBc{BBd;d.a=a+c.a;d.b=b+c.b;returnd;}BBoperator-BBc{BBd;d.a=a-c.a;d.b=b-c.b;returnd;}voidshow{coutabendl;}};voidmain{BBx1015y57z;z=x+y;z.show;z=x-y;z.show; }
21.
21.#includeiostream.h#includestring.hclassPoint{intxy;public:Pointintx1=0inty1=0:xx1yy1{coutPoint:xy\n;}~Point{coutPointdes!\n;}};classText{chartext
[100];public:Textchar*str{strcpytextstr;coutTextcon!\n;}~Text{coutTextdes!\n;}};classCircleWithText:publicPointpublicText{public:CircleWithTextintcxintcychar*msg:PointcxcyTextmsg{coutPointwithTextcon!\n;}~CircleWithText{coutPointwithTextdes\n;}};voidmain{CircleWithTextcm34hello;}
22.
22.#includeiostream.hclassCroot{public:intx;Croot{x=2;coutConstructor
1.\n;}Crootintn{x=n;coutConstructor
2.\n;}voidshowsmall{coutx=xendl;}};classCder1:publicCroot{public:Cder1intm:Crootm{}};classCder2:publicCroot{public:intx;Cder2intn=0{x=n;}};voidmain{CrootA;Cder1bb4;Cder2cc;A.showsmall;bb.showsmall;cc.showsmall;}
23.
23.#includeiostream.hclassCroot{public:intsmall;Croot{small=2;cout”CalledConstructor
1.\n”;}Crootintn{small=n;cout”CalledConstructor
2.\n”;}voidshowsmall{coutsmall=smallendl;}};classCder1:publicCroot{public:Cder1intm:Crootm{}};classCder2:publicCroot{public:intsmall;Cder2intn=0{small=n;}};voidmain{CrootA;Cder1bb4;Cder2cc;A.showsmall;bb.showsmall;cc.showsmall;}四程序
1.定义一个第3题的结构体类型的结构体数组stud,输入学生三门课成绩,然后按总分成绩排序后输出学生成绩#includeiostream.hstructstud{intno;charname
[20];intmath;inteng;intc;intsum;}st
[10];intn=-1; //表示数组元素当前下标voidmain{intx=1ij;studt;cout请输入学生记录,按0结束endl;whilex {cinx;ifx{n++; //读入学号st[n].no=x; //读入姓名cinst[n].namest[n].mathst[n].engst[n].c;//读入三门课成绩st[n].sum=st[n].math+st[n].eng+st[n].c; //计算三门课总分}elsebreak;}fori=0;in;i++ // 采用冒泡排序法对总分排序forj=0;jn-i;j++ifst[j].sumst[j+1].sum{t=st[j];st[j]=st[j+1];st[j+1]=t;}fori=0;i=n;i++ //输出排序后学生信息coutst[i].nost[i].namest[i].mathst[i].cst[i].engst[i].sumendl;}
2.声明一个哺乳动物Mammal类,再由此派生出狗Dog类,声明一个Dog类的对象,观察基类与派生类的构造函数与析构函数的调用顺序#includeiostream.hclassMammal{public:Mammal{coutcallMammalendl;}~Mammal{coutDeletebaseclassendl;}};classDog:publicMammal{public:Dog{coutcallDog\n;}~Dog{coutDeleteDogclass\n;}};voidmain{Dogb;}
3.定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类,教师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩#includeiostream.h#includestring.h#includeiomanip.hclassbase//定义一个基类{protected:charname
[20];//姓名charsex
[3];//性别intage;//年龄…………};classteacher:publicbase//基类派生出教师类{intsno;//工号charzc
[20];//职称doublewages;//工资…………};classstudent:publicbase//基类派生出学生类{intsno;//学号charbj
[10];//班级charzy
[10];//专业doublescore;//入学成绩…………};
4.建立一个基类Building,用来存储一座楼房的层数、房间数以及它的总平方英尺数建立派生类Housing,继承Building,并存储下面的内容卧室和浴室的数量,另外,建立派生类Office继承Building,并存储灭火器和电话的数目然后,编制应用程序,建立住宅楼对象和办公楼对象,并输出它们的有关数据程序代码#includeiostream.hclassBuilding{public:Buildingintfintrdoubleft{floors=f;rooms=r;footage=ft;}voidshow{coutfloors:floorsendl;coutrooms:roomsendl;couttotalarea:footageendl;}protected:intfloors;introoms;doublefootage;};classHousing:publicBuilding{public:Housingintfintrdoubleftintbdintbth:Buildingfrft{bedrooms=bd;bathrooms=bth;}voidshow{cout\nHOUSING:\n;Building::show;coutbedrooms:bedroomsendl;coutbathrooms:bathroomsendl;}private:intbedrooms;intbathrooms;};classOffice:publicBuilding{public:Officeintfintrdoubleftintphintex:Buildingfrft{phones=ph;extinguishers=ex;}voidshow{cout\nHOUSING:\n;Building::show;coutphones:phonesendl;coutextinguishers:extinguishersendl;}private:intphones;intextinguishers;};voidmain{Housinghob5714022;Officeoob812500122;hob.show;oob.show;}
5.声明一个Shape基类,在此基础上派生出Rectangle矩形类和Circle(圆)类,二者都有GetArea函数计算对象的面积分别求二种图形的面积(矩形和宽为1020圆的半径为
3.5)#includeiostream.h#definePI
3.1415926#includemath.hclassbase//抽象基类B0声明{public://外部接口virtualvoiddisplay=0;//纯虚函数成员};classcircle:publicbase//公有派生{protected:doublersp;public:circledoublex=0{r=x;}voiddisplay{cout圆的面积 r*r*PIendl;cout圆的周长 PI*r*2endl;//虚成员函数}};classincircle:publiccircle//公有派生{doublea;public:incircledoublex=0:circlex{}voiddisplay{a=sqrtr;cout内接正方形面积a*aendl;cout内接正方形周长4*aendl;//虚成员函数}};classoutcircle:publiccircle//公有派生{public:outcircledoublex=0:circlex{}voiddisplay{cout外切正方形面积4*r*rendl;cout外切正方形周长8*rendl;//虚成员函数}};voidfunbase*ptr//普通函数{ptr-display;}voidmain//主函数{base*p;//声明抽象基类指针circleb110;//声明派生类对象incircled19;//声明派生类对象outcirclee110;p=b1;funp;p=d1;funp;p=e1;funp;}
6.分别用成员函数和友元函数重载运算符,使对实型的运算符=、+、-、*、/适用于复数运算用友元成员函数重载运算符,使对实型的运算符+、-适用于复数运算程序#includeiostream.hclasscomplex//复数类声明{public:complexdoubler=
0.0doublei=
0.0{real=r;imag=i;}//构造函数friendcomplexoperator+complexc1complexc2;//运算符+重载友元函数friendcomplexoperator-complexc1complexc2;//运算符-重载友元函数voiddisplay;//显示复数的值private://私有数据成员doublereal;doubleimag;};voidcomplex::display//显示函数实现{coutrealimagendl;}complexoperator+complexc1complexc2//运算符重载友元函数实现{returncomplexc
2.real+c
1.realc
2.imag+c
1.imag;}complexoperator-complexc1complexc2//运算符重载友元函数实现{returncomplexc
1.real-c
2.realc
1.imag-c
2.imag;}voidmain//主函数{complexc154c2210c3;coutc1=;c
1.display;coutc2=;c
2.display;c3=c1-c2;//使用重载运算符coutc3=c1-c2=;c
3.display;c3=c1+c2;//使用重载运算符coutc3=c1+c2=;c
3.display;}
7.编写出程序,计算两点之间的距离方法1可以定义点类(Point),再定义一个类(Distance)描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现#includeiostream.h#includemath.hclassPoint{public:Pointinta=0intb=0{x=a;y=b;}intxcord{returnx;}intycord{returny;}private:intxy;};classDistance{public:DistancePointq1Pointq2;doublegetdist{returndist;}private:Pointp1p2;doubledist;};Distance::DistancePointq1Pointq2:p1q1p2q2{doublex=doublep
1.xcord-p
2.xcord;doubley=doublep
1.ycord-p
2.ycord;dist=sqrtx*x+y*y;}voidmain{Pointp00q11;Distancedispq;cout”Thedistanceis:”dis.getdistendl;}方法2将两点之间距离函数声明为Point类的友元函数#includeiostream.h#includemath.hclassPoint{public:Pointinta=0intb=0{x=a;y=b;}intxcord{returnx;}intycord{returny;}private:intxy;frienddoubleDistancePointp1Pointp2;};doubleDistancePointp1Pointp2{doubledx=doublep
1.x-p
2.x;doubledy=doublep
1.y-p
2.y;returnsqrtdx*dx+dy*dy;}voidmain{Pointq100q211;cout”Thedistanceis:”Distanceq1q2endl;}
8.定义盒子Box类,要求具有以下成员可设置盒子形状;可计算盒子体积;可计算盒子的表面积#includeiostream.hclassrectangle{intlenwid;public:rectangleinti=0intj=0{len=i;wid=j;}friendintarearectangletempreturns;}friendfunrectangletemp{intp=2*temp.len+temp.wid;returnp;}};voidmain{rectanglea1020;cout长方形的周长和面积为areaa\tfunaendl;rectangleb100200;cout长方形的周长和面积为areab\tfunbendl;}
9.定义计数器类Counter要求具有以下成员计数器值;可进行增值和减值记数;可提供记数值#includeiostream.hclassCounter{intn;public:Counterinti=0{n=i;}voidinit_Counterintm{n=m;}voidin_Counter{n++;}voidde_Counter{n--;}intget_Counter{returnn;}voidshow{coutnendl;}};voidmain{Countera;a.in_Counter;a.show;a.init_Counter10;a.show;a.de_Counter;couta.get_Counterendl;}
10.编写一个程序计算两个给定的长方形的周长和面积#includeiostream.hclassrectangle{intlenwid;public:rectangleinti=0intj=0{len=i;wid=j;}friendintarearectangletempreturns;}friendfunrectangletemp{intp=2*temp.len+temp.wid;returnp;}};voidmain{rectanglea1020;cout长方形的周长和面积为areaa\tfunaendl;rectangleb100200;cout长方形的周长和面积为areab\tfunbendl;}
11.编写一个程序,采用一个类求n!并输出10!的值#includeiostream.hclassfac{intp;public:fac{p=1;}facintj{p=1;ifj=0forinti=1;i=j;i++p=p*i;elsecout数据错误\n;}voidshow{cout阶乘为pendl;}};voidmain{intn;cout请输入一个整数;cinn;facan;coutn;a.show;}
12.定义一个日期类date,它有三个私有数据成员年、月、日和若干个成员函数,并实现如下要求
(1)用构造函数对数据成员赋值;
(2)定义一个函数打印日期并要求对数据输入、输出#includeiostreamusingnamespacestd;classTdate{intyearmonthday;public:Tdateinty=2008intm=1intd=1{year=y;month=m;day=d;}voidset_Tdateinty=2000intm=12intd=30{year=y;month=m;day=d;}voiddisplay{coutyear.month.dayendl;}};voidmain{Tdateobj1obj22008130;coutObj1:;obj
1.display;coutObj2:;obj
2.display;obj
2.set_Tdate2008610;obj
2.display;}
13.定义Point类,有数据成员X和Y,重载++和--运算符,要求同时重载前缀方式和后缀方式答案#includeiostream.hclassPoint{public:Point{X=Y=0;}intGetX{returnX;}intGetY{returnY;}Pointoperator++;Pointoperator++int;Pointoperator--;Pointoperator--int;voidPrint{coutThepointisXYendl;}private:intXY;};PointPoint::operator++{X++;Y++;return*this;}PointPoint::operator++int{Pointtemp=*this;++*this;returntemp;}PointPoint::operator--{X--;Y--;return*this;}PointPoint::operator--int{Pointtemp=*this;--*this;returntemp;}voidmain{Pointobj;obj.Print;obj++;obj.Print;++obj;obj.Print;obj--;obj.Print;--obj;obj.Print;}
14.定义一个字符串onestr,包含一个存放字符串的成员变量,能够通过构造函数初始化字符串,通过成员函数显示字符串的内容在此基础上派生twostr类,增加一个存放字符串的成员变量,并能够通过派生类的构造函数传递参数,初始化两个字符串,通过成员函数进行两个字符串的合并以及输出 #includeiostream.h#includestring.hclassonestr{protected:charstr1
[30];public:onestrchar*p{strcpystr1p;}};classtwostr:publiconestr{charstr2
[40];public:twostrchar*q1char*q2:onestrq1{strcpystr2q2;}voiddisplay{strcatstr2str1;coutstr2endl;}};voidmain{twostrchThisiaastring.Shanghai.;ch.display;}
15.建立一个基类Building,用来存储一座楼房的层数、房间数以及它的总平方英尺数建立派生类Housing,继承Building,并存储下面的内容卧室和浴室的数量,另外,建立派生类Office继承Building,并存储灭火器和电话的数目然后,编制应用程序,建立住宅楼对象和办公楼对象,并输出它们的有关数据程序代码#includeiostream.hclassBuilding{public:Buildingintfintrdoubleft{floors=f;rooms=r;footage=ft;}voidshow{coutfloors:floorsendl;coutrooms:roomsendl;couttotalarea:footageendl;}protected:intfloors;introoms;doublefootage;};classHousing:publicBuilding{public:Housingintfintrdoubleftintbdintbth:Buildingfrft{bedrooms=bd;bathrooms=bth;}voidshow{cout\nHOUSING:\n;Building::show;coutbedrooms:bedroomsendl;coutbathrooms:bathroomsendl;}private:intbedrooms;intbathrooms;};classOffice:publicBuilding{public:Officeintfintrdoubleftintphintex:Buildingfrft{phones=ph;extinguishers=ex;}voidshow{cout\nHOUSING:\n;Building::show;coutphones:phonesendl;coutextinguishers:extinguishersendl;}private:intphones;intextinguishers;};voidmain{Housinghob5714022;Officeoob812500122;hob.show;oob.show;}
16.有一正方体形环,其中小正方形连长为5,大正方形连长为10编程定义一个square类,求正方体形环面积#includeiostream.hclasssquare{floatrs;public:squarefloatr1=0{r=r1;}floatarea{s=3r*r;returns;}frienddoublesubareasquares1squares2{returns
1.area-s
2.area;}};voidmain{squareobj110;squareobj25;coutsubareaobj1obj2endl;}
17.定义应用抽象类(base),求圆(circle)和圆外切正方形(outcircle)的面积和周长程序#includeiostream.h#definePI
3.1415926classbase//抽象基类B0声明{public:virtualvoiddisplay=0;//纯虚函数成员};classcircle:publicbase//公有派生{protected:doublersp;public:circledoublex=0{r=x;}voiddisplay{cout圆的面积 r*r*PIendl;cout圆的周长 PI*r*2endl;//虚成员函数}};classoutcircle:publiccircle//公有派生{public:outcircledoublex=0:circlex{}voiddisplay{cout外切正方形面积4*r*rendl;cout外切正方形周长8*rendl;//虚成员函数}};voidfunbase*ptr//普通函数{ptr-display;}voidmain//主函数{base*p;//声明抽象基类指针circleb110;//声明派生类对象outcirclee110;p=b1;funp;p=e1;funp;}
18.利用一个二进制文件保存10个100以内的整数(数据用键盘输入)程序#includeiostream.h#includestdlib.h#includefstream.hvoidmain{ofstreamfile1;//定义输出文件流file1file
1.opene:\\write
1.datios::out|ios::binary;if!file1{cerr\nA:\\write
1.datnotopenendl;exit-1;}intnk;file
1.writechar*ksizeofint;fork=1;k=10;k++{cinn;file
1.writechar*nsizeofint;}file
1.close;}。