2023年面向对象程序设计打印_第1页
2023年面向对象程序设计打印_第2页
2023年面向对象程序设计打印_第3页
2023年面向对象程序设计打印_第4页
2023年面向对象程序设计打印_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、填空题1.面向对象系统的四个特性分别是抽象性继承性、封装性和多态性。2.假如一个类至少有一个纯虚函数,那么该类被称为抽象类。3.对于具有对象成员的派生类,其构造函数的执行顺序为:先执行基类构造函数、再执行子对象构造函数,最后执行派生类构造函数。4.纯虚函数的声明格式为:virtual函数类型函数名(参数列表)=0;。5.运算符重载仍然保持本来的结合性、优先级和语法结构。6.类型转换函数的作用是将一个类的对象转换成另一类型的数据。7.静态联编支持的多态性称为编译时的多态性,也称静态多态性。8.类中成员的三种访问权限分别是public、private和protected。9.定义派生类时,系统默认的继承方式是private。10.C++允许在相同的作用域内以相同的名字定义几个不同实现的函数,称这种同一个函数名多种含义的现象为函数重载。11.在C++中,运营时的多态性重要通过虚函数和继承实现。12.在一个函数的定义或声明前加上关键字inline时,该函数就声明为内置函数。13.派生类的成员涉及从基类继承来的成员和自己增长的成员两大部分。14.cin称为C++标准输入流。63.在C++语言中,cout被称为标准输出流。15.在C++语言中,用运算符new动态建立对象,用运算符delete撤消对象。16.基类的构造函数和析构函数不能被派生类继承。17.名称为temp的类的复制构造函数的原型声明语句为temp(consttemp&s);。18.设立友元函数的目的是为了可以访问该类的私有成员和保护成员。19.在C++程序中,静态成员函数重要用来访问静态数据成员。20.类模板是类的抽象,类是类模板的实例。21.拷贝构造函数的形参必须是当前类对象的引用类型。22.进行函数重载时,被重载的同名函数假如都没有用const修饰,则它们的形参个数不同或类型不同或个数和类型都不同。23.在类中必须声明成员函数的原型,成员函数的实现部分可以写在类外。24.多态性是指发出同样的消息被不同类型的对象接受时有也许导致完全不同的行为。25.在已有类的基础上新增自己的特性而产生新类的过程称为派生。26.当用类的一个对象去初始化该类的另一个对象时系统自动调用复制构造函数实现赋值。27.友元函数是在类声明中由关键字friend修饰说明的非成员函数,在它的函数体中可以通过对象名访问private和protected成员。28.假如需要在某个类的声明之前,引用该类,则应进行前向引用声明。29.对象是将数据及对数据的操作方法封装在一起,作为一个互相依存、不可分离的整体。30.C++中输出数据时,在标准输出流对象cout之后使用的运算符“<<”称为流插入。31.从系统实现角度看,多态性分为静态多态性和动态多态性。32.基类的私有成员在派生类中是不可访问的。33.对象空间的起始地址就是对象的指针。34.对象与对象之间通过消息进行通讯。35.C++中用于定义模板的关键字是template。36.在C++的类中包含两种成员,分别是数据成员和成员函数。37.所谓函数模版,事实上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。38.C++为提高函数调用的效率,允许在编译时将所调用函数的代码嵌入到主函数中,这种嵌入到主函数的函数称为内置函数。39.类中有两种特殊的成员函数,分别是构造函数和析构函数。40.若要定义指向Time类对象t1的常指针ptr,其定义语句为:Time*constptr=&t1;。41.假如函数的形参为类的对象,在调用函数时需要将实参对象完整地传递给形参对象,此时系统要调用复制构造函数来实现。42.假如需要在同类的多个对象之间实现数据共享,但不用全局变量,可以用静态成员变量。43.在C++中,要访问类中的私有成员,可以使用成员函数和友元函数。44.C++中,有四个运算符必须重载为类的成员函数,而不能重载为友元函数,这四个运算符分别是:=,[],(),->。45.若要实现两个复数类对象相加运算,并且满足互换律,要将“+”重载为类的友元函数。46.面向对象技术强调软件的可重用性,C++语言提供了类的继承机制,解决了软件重用问题。47.C++中允许一个派生类同时继承多个基类,这种行为称为多重继承。48.声明虚基类命令的的一般形式为class派生类名:virtual继承方式基类名。49.只有公用继承才是基类真正的子类型。50.动态多态性是在程序运营过程中才动态地拟定操作所针对的对象,又称为运营时的多态性。51.虚函数一定是类的成员函数。52.静态成员函数没有this指针。53.类中成员默认的访问属性是private。54.用关键字inline声明的函数称为内置函数。55.若将两个复数相加运算符“+”重载为类complex的成员函数,且函数的返回值为当前类的对象,其函数的原型声明语句为complexoperator+(complex&);。56.若用op代表C++中任意一个允许重载的运算符,其重载函数名为operatorop。57.C++中的模板分为类模板和函数模板。58.具有封装性、继承性和多态性特点的程序设计称为面向对象的程序设计。59.用已有对象复制一个新对象时要调用复制构造函数。60.在基类中将show(无参数)声明为返回整型数据的纯虚函数的语句格式为:virtualintshow()=0;。61.在派生类中,对基类的继承方式可以有public、private和protected。62.将双目运算符重载为某类的成员函数时,该成员函数的左操作数为当前对象(或*this),右操作数为函数参数。64.若要访问类中的私有成员,除了可以运用成员函数外,还可以采用的友元函数的方式。65.定义静态成员函数的目的是为了访问类中的静态数据成员。66.要实现运营时的多态性要使用虚函数和继承。67.派生类的成员来自两个途径,一种是派生类中定义的成员,另一种从基类继承来的成员。68.构造函数是一种特殊的成员函数,其作用是对类的数据成员进行初始化并执行对象的其他内部管理操作。69.在类中定义和实现的函数称为成员函数。70.const成员函数只能引用本类中的数据成员,而不以修改数据成员。71.假如一个类中至少有一个纯虚函数,那么该类被称为抽象类。72.C++中用static声明的对象称为静态对象。73.若有类名为sample,则其复制构造函数的原型声明语句为sample(constsample&);。ﻬ二、选择题1.设int×=10,×+=3+×%(-3),则×=______C___。A.15 B.11ﻩC.14ﻩD.122.下列运算符,不能重载为友元函数的是_______D________。A.<、>、<=、>=ﻩB.+、-、++、--ﻩC.+=、-=、*=、/= D.=、()、[]、->3.在C++中,要实现动态联编,必须使用______B_______调用虚函数A.派生类指针 B.基类指针 C.对象名ﻩD.类名4.若运算符“>”被重载为类的成员函数,则表达式obj1>obj2被C++编译器解释为____A_____。A.obj1.operator>(obj2) B.obj2.operator>(obj1)C.operator>()ﻩD.>(obj1,obj2)5.对于语句cout<<×<<endl;中的各个组成部分,下列叙述中错误的是_____B______。A.“cout”是一个输出流对象ﻩB.“<<”称作流提取运算符C.“×”是一个变量 D.“endl”的作用是输出回车换行6.在下列函数原型中,可以作为类AA构造函数的是_____B__________。A.intAA(); B.AA(int); C.AA(int)const; D.voidAA(int);7.函数调用语句fun(a+b,3,ma×(n-1,b));中,实参的个数为_______D______A.4ﻩB.6 C.5 D.38.有关虚函数的说法不对的的是______B_________。A.构造函数不能是虚函数 B.静态成员函数可以是虚函数C.只有类的成员函数才干说明为虚函数 D.析构函数可以是虚函数9.逗号表达式a=4,b=6,a--,b--,a+b的值为______B_________。A.9 B.8ﻩC.10ﻩD.610.对于类中定义的成员,其隐含访问权限为______B________A.public B.private C.staticﻩD.protected11.设立虚基类的目的是____C_______。A.简化程序 B.提高运营效率ﻩC.消除二义性 D.减少目的代码12.定义函数模板使用的关键字是_____A______。A.templateﻩB.inline C.classﻩD.operator13.在intb[][3]={{1},{3,2},{4,5,6},{0}};中b[2][2]的值是___C____。A.0ﻩB.5ﻩC.6ﻩD.214.友元的作用之一是____B______。A.增长成员函数的种类ﻩB.提高程序的运营效率C.实现数据的隐藏性ﻩD.加强类的封装性15.下列表达引用的方法中,_____C_____是对的的。已知:intm=10;A.int&z; B.int&y=10; C.int&×=m; D.float&t=&m;16.通过指向对象的指针变量取成员的运算符是____C_____。A.>>ﻩB.· C.->ﻩD.<<17.已知类A中一个成员函数说明如下:Voidset(A&a);其中,A&a的含义是_____C____。A.指向类A的指针为aB.将a的地址值赋给变量setC.a是类A的对象引用,用来作为函数set()的形参D.变量A与a按位相与作为函数set()的参数18.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化次数____B_____。A.与虚基类下面的派生类个数有关 B.一次 C.二次ﻩD.多次19.下列函数中,_____D____不能重载。A.成员函数ﻩB.非成员函数ﻩC.构造函数 D.析构函数20.关于动态联编的下列描述中,____A_____是错误的。A.动态联编是在编译时拟定操作函数的B.动态联编是以虚函数为基础的C.动态联编是在运营时拟定所调用的函数代码的D.动态联编调用函数操作是用指向对象的指针或对象引用21.下列运算符中,_____D____运算符不能重载。A.&&ﻩB.new C.[]ﻩD.::22.关于虚函数的描述中,___A______是对的的。A.函数基类中说明了虚函数后,派生类中将其相应的函数可不必说明为虚函数B.虚函数是一个非成员函数C.虚函数是一个static类型的成员D.派生类的虚函数与基类的虚函数具有不同的参数个数和类型23.下面关于对象的描述中,错误的是___D______。A.对象之间的信息传递是通过消息进行的ﻩB.对象是类的实例C.一个类可以定义多个对象ﻩD.对象是类的别名24.下述静态数据成员的特性中,____C_____是错误的。A.说明静态数据成员时前边要加修饰符staticB.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符C.静态数据成员不是所有对象所共用的D.静态数据成员要在类体外进行初始化25.有关类的说法中,不对的的是____D_____。A.类是一种用户定义的数据类型B.类中的成员函数可以存取类中的私有数据C.在类中,假如不作特别说明,所有的成员函数均为私有类型D.在类中,假如不作特别说明,所有的数据成员均为公有类型26.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的__C_。A.public成员ﻩB.protected成员 C.private成员ﻩD.友元27.有如下类声明:classsample{public:intmem;};则sample类的成员mem是____B_____A.公有成员函数 B.公有数据成员ﻩC.私有数据成员ﻩD.私有成员函数28.在C++中,关于设立参数的默认值的描述中,对的的是____A____。A.设立参数默认值时,应当是先设立右边的再设立左边的B.设立参数默认值只能在定义函数时设立C.设立参数默认值时,应当所有参数都设立D.不允许设立参数的默认值29.函数模板的使用,事实上是将函数模板实例化成一个具体的____B____。A.类 B.函数ﻩC.对象 D.模板类30.在多重继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则____A____。A.完全相同 B.完全不同 C.部分相同,部分不同 D.以上都不对31.下面关于对象概念的描述中,____C____是错误的。A.对象是一个状态和操作(或方法)的封装体B.对象代表着正在创建的系统中的一个实体C.对象就是C语言中的结构体变量D.对象之间的信息传递是通过消息进行的32.继承机制的作用是_____A_____A.定义新类ﻩB.数据封装 C.数据抽象 D.信息隐藏33.有关析构函数的说法不对的的是____A_____A.析构函数不能是虚函数 B.析构函数无任何函数类型C.析构函数没有形参 D.析构函数有且只有一个34.友元的作用之一是____C______A.加强类的封装性 B.实现数据的隐藏性C.提高程序的运营效率ﻩD.增长成员函数的种类35.通常拷贝构造函数的参数是____B______。A.本类对象名 B.本类对象的引用名 C.本类对象的成员名 D.本类对象的指针名36.假如在基类中将show声明为不带返回值的纯虚函数,对的的写法是_____C___。A.virtualshow()=0;ﻩB.virtualvoidshow();C.virtualvoidshow()=0;ﻩD.voidshow=0virtual;37.下面关于友元的描述中,错误的是___A______。A.类与类之间的友元关系可以继承B.一个类的友元类中的成员函数都是这个类的友元函数C.友元函数可以访问该类的私有数据成员D.友元可以提高程序的运营效率38.在C++中,_____B____运算符不能重载。A.+ B.sizeof C.- D.<=39.下列关于运算符重载的描述中,____A____是对的的。A.运算符重载不可以改变语法结构ﻩB.运算符重载可以改变结合性C.运算符重载可以改变优先级ﻩD.运算符重载可以改变操作数的个数40.当一个派生类保护继承一个基类时,基类中的所有公有成员和保护成员成为派生类的__B_。A.private成员 B.protected成员ﻩC.public成员ﻩD.友元41.在声明类时,下面的说法对的的是____B____。A.可以在类的声明中给数据成员赋初值B.private,public,protected可以按任意顺序出现C.数据成员的数据类型可以是registerD.没有用private,public,protected定义的数据成员是公有成员42.有如下类声明:classFoo{intbar;};则Foo类的成员bar是____A_____A.私有数据成员 B.私有成员函数 C.公有数据成员 D.公有成员函数43.设立虚基类的目的是____B____。A.简化程序 B.消除二义性 C.减少目的代码ﻩD.提高运营效率44.对虚函数的调用_____A_____。A.不一定使用动态联编ﻩB.必须使用动态联编C.一定使用动态联编 ﻩD.一定使用静态联编45.关于成员函数特性的下述描述中,____B___是错误的。A.成员函数可以是静态的 B.成员函数一定是内置函数C.成员函数可以设立参数的默认值ﻩD.成员函数可以重载46.类的成员函数不涉及_______C________。A.构造函数 B.析构函数 C.友元函数 D.拷贝构造函数47.继承具有___A_____,即当基类自身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。A.传递性 B.规律性ﻩC.反复性ﻩD.多样性48.若运算符“>”被重载为类的友元函数,则表达式obj1>obj2被C++编译器解释为___C____。A.>(obj1,obj2) B.obj1.operator>(obj2)C.operator>(obj1,obj2)ﻩD.operator>()49.下面关于友元的描述中,错误的是___C______。A.友元函数可以访问该类的私有数据成员B.友元可以提高程序的运营效率C.类与类之间的友元关系可以继承D.一个类的友元类中的成员函数都是这个类的友元函数50.有关构造函数的说法不对的的是____C_____。A.构造函数名字和类的名字同样 B.构造函数无任何函数类型C.构造函数有且只有一个ﻩD.构造函数在说明类的某个对象时自动执行51.设n=8,i=4,则赋值运算n%=i+1执行后,n的值是_____C_____。A.0 B.1 C.3ﻩD.252.在下列选项中,_____B____不能作为鉴定函数重载的依据。A.参数个数 B.函数的类型 C.参数的类型 D.函数名称53.有关虚函数的说法不对的的是______A_________。A.静态成员函数可以是虚函数ﻩB.只有类的成员函数才干说明为虚函数C.构造函数不能是虚函数ﻩD.析构函数可以是虚函数54.派生类的对象对它的基类___D___是可以访问的。A.公有继承的私有成员ﻩB.私有继承的公有成员C.公有继承的保护成员 D.公有继承的公有成员55.下列关于switch语句的描述中,___A__是对的的。A.switch语句中default子句可以没有,也可有一个B.switch语句中每个语句序列中必须有break语句C.switch语句中default子句只能放在最后D.switch语句中case子句后面的表达式只能是整型表达式56.能用友元函数重载的运算符是____D______。A.->ﻩB.= C.[]ﻩD.+三、读程序写结果1.#include<iostream.h>usingnamespacestd;classpoint{public:point(inti,intj){x=i;y=j;}voidprint(){cout<<‘(’<<x<<‘,’<<y<<‘)’<<endl;}voidoperator+=(pointp){x+=p.x;y+=p.y;}voidoperator-=(pointp){x-=p.x;y-=p.y;}private:intx,y;};voidmain(){pointp1(2,3),p2(1,4);p1.print();p2.print();p1+=p2;p1.print();p2-=p1;p2.print();}运营结果:(2,3)(1,4)(3,7)(-2,-3)2.#include<iostream.h>usingnamespacestd;classtimer{public:timer(){seconds=0;}timer(intt){seconds=t;}timer(intmin,intsec){seconds=min*60+sec;}intgettime(){returnseconds;}private:intseconds;};voidmain(){timera,b(20),c(3,12);cout<<"seconds1="<<a.gettime()<<endl;cout<<"seconds2="<<b.gettime()<<endl;cout<<"seconds3="<<c.gettime()<<endl;ﻩ}运营结果:seconds1=0seconds1=20seconds1=1923.#include<iostream>usingnamespacestd;classA{public:A(inti,intj){a=i;b=j;}voidmove(intx,inty){a+=x;b+=y;}voidshow(){cout<<'('<<a<<','<<b<<')'<<endl;}private:inta,b;};classB:publicA{public:B(inti,intj,intk,intl):A(i,j),x(k),y(l){}voidshow(){cout<<x<<","<<y<<endl;}voidfun(){move(3,5);}voidf1(){A::show();}private:intx,y;};intmain(){Ae(4,6);e.show();Bd(1,3,2,5);d.fun();d.A::show();d.B::show();d.f1();system("pause");return0;}运营结果:(4,6)(4,8)2,5(4,8)4.#include<iostream>usingnamespacestd;classA{public:A(inti=0){m=i;cout<<"constructorcalled."<<m<<endl;}voidset(inti){m=i;}voidprint()const{cout<<m<<endl;}A(constA&s){m=s.m;cout<<"copy"<<endl;}~A(){cout<<"destructorcalled."<<m<<endl;}private:intm;};intmain(){constintN=7;Amy;my=N;my.print();return0;}运营结果:constructorcalled.0constructorcalled.7desstructorcalled.77desstructorcalled.75.#include<iostream>usingnamespacestd;classM{public:M(inta=0,intb=0){x=a;y=b;}intgetx(){returnx;}intgety(){returny;}private:intx,y;};intmain(){Mop1(8,6);inti,j;i=op1.getx();j=op1.gety();cout<<"i="<<i<<",j="<<j<<endl;system("pause");return0;}运营结果:i=8,j=66.#include<iostream>usingnamespacestd;template<classtype1,classtype2>voidmyfunc(type1x,type2y){cout<<x<<','<<y<<endl;}intmain(){myfunc(27,"program");myfunc(12.23,32u);return0;}ﻩ运营结果: 27,"program"12.23,327.#include<iostream>#include<iomanip>usingnamespacestd;classBook{intnum,price;public:Book(inta=0,intb=0){num=a;price=b;}voidshowMoney(){cout<<setw(4)<<num*price<<endl;}};intmain(){Bookb[]={Book(3,9),Book(2,8),Book(4,7)};Book*p;inti;p=b;for(i=0;i<3;i++,p++)p->showMoney();system("pause");return0;}运营结果:27 ﻩ(前面有俩空格)16ﻩﻩﻩ (前面有俩空格)28(前面有俩空格)8.#include<iostream>usingnamespacestd;classPoint{public:Point(){X=Y=0;cout<<"FIRST:DefaultConstructorcalled.\n";}Point(intxx,intyy){X=xx;Y=yy;cout<<"SECOND:Constructorcalled.\n";}~Point(){cout<<"THIRD:Destructorcalled.\n";}intGetX(){returnX;}intGetY(){returnY;} voidMove(intx,inty) {X=x;Y=y;}private:intX,Y;};intmain(){cout<<"StepOne:"<<endl;Point*Ptr1=newPoint;deletePtr1;cout<<"StepTwo:"<<endl;Ptr1=newPoint(5,6);deletePtr1;return0;}运营结果:StepOne:FIRST:DefaultConstructorcalled.THIRD:Destructorcalled.StepTwo:SECOND:Constructorcalled.THIRD:Destructorcalled.9.#include<iostream.h>classPoint{public:Point(intxx,intyy);~Point();intGetX(){returnX;}intGetY(){returnY;}private:intX,Y;};Point::Point(intxx,intyy){X=xx;Y=yy;cout<<"Constructorcalled."<<endl;}Point::~Point(){cout<<"Destructorcalled."<<endl;}intmain(){PointA(1,4);Point*ptr;ptr=&A;intx;x=ptr->GetX();cout<<x<<endl;return0;}运营结果:Constructorcalled.1Destructorcalled.10.#include<iostream>usingnamespacestd;classTest{staticintcount;public:Test(){++count;cout<<"对象数量="<<count<<endl; }~Test(){--count;cout<<"对象数量="<<count<<endl; }};intTest::count=0;intmain(){Testt[4];}ﻩ运营结果:ﻩ对象数量=1ﻩ对象数量=2ﻩ对象数量=3 对象数量=4 对象数量=3ﻩ对象数量=2ﻩ对象数量=1 对象数量=011.#include<iostream>usingnamespacestd;intmain(){intnum=2345;longp=1;do{p*=num%10;num/=10;}while(num);cout<<"p="<<p<<endl;return0;}运营结果:p=12012.#include<iostream>usingnamespacestd;inta[]={1,2,3,4,5};int&fun(inti){returna[i];}intmain(){inti;fun(2)=10;for(i=0;i<5;i++)cout<<a[i]<<“”;//“”中间空2个格cout<<endl;system("pause");return0;}运营结果:121045(中间两个空格)13.#include<iostream>usingnamespacestd;intn=0;int&f(intm){n+=m;returnn;}intmain(){f(3)+=21;cout<<"n="<<n<<endl;return0;}运营结果:n=2414.#include<iostream>#include<iomanip>usingnamespacestd;classmyclass{public:myclass(){cout<<setw(4)<<1;}myclass(charc){cout<<setw(4)<<2;}~myclass(){cout<<setw(4)<<3<<endl;}};intmain(){myclassa,p1,*p2;p2=newmyclass('X');deletep2;system("pause");return0;}运营结果:1123(每个数字前面3个空格)3 ﻩ ﻩﻩ ﻩ(每个数字前面3个空格)3 ﻩﻩﻩ ﻩﻩ(每个数字前面3个空格)15.#include<iostream>usingnamespacestd;int&f1(intn,ints[]){int&m=s[n];returnm;}intmain(){ints[]={1,2,3,4,5,6};f1(2,s)=10;cout<<f1(2,s)<<endl;return0;}运营结果:1016.#include<iostream>usingnamespacestd;classB;classA{public: A(inti){a=i;}friendintF(A&f1,B&f2);private:ﻩinta;};classB{public: B(inti){b=i;}friendintF(A&f1,B&f2);private: intb;};intF(A&f1,B&f2){return(f1.a+f2.b)*(f1.a-f2.b);}intmain(){An1(8);Bn2(6);cout<<F(n1,n2)<<endl;return0;}运营结果:28四、程序填空1.下面的程序中定义抽象类Base1,运用基类指针作函数形参调用虚函数,以实现动态联编。#include<iostream>usingnamespacestd;classBase1//(1)基类Base1定义{public:virtualvoiddisplay()const=0;//(2)纯虚函数(常成员函数)的定义};classBase2:publicBase1//(3)基类Base1的公有派生类Base2定义{public:voiddisplay()const;};voidBase2::display()const{cout<<"Base2::display()"<<endl;}classDerived:publicBase2//(4)派生类Derived公有继承Base2{public:voiddisplay()const;};voidDerived::display()const{cout<<"Derived::display()"<<endl;}voidfun(Base1*ptr)//(5)形参为基类指针的没有返回值的普通函数fun的函数首部{ptr->display();//(6)用基类指针ptr调用虚函数display()}intmain(){Base2base2;Derivedderived;//(7)定义Derived类对象fun(&base2);//(8)用Base2对象的指针调用fun函数fun(&derived);return0;}2.下面的程序是应用普通函数作为类的友元函数,以访问类中的私有成员。#include<iostream>usingnamespacestd;classTime//(1)定义类Time{public:Time(inth,intm,ints);//(2)带三个整型形参的构造函数的原型声明friendvoiddisplay(Time&);//(3)函数display声明为当前类的友元函数private://(4)私有访问属性inthour,minute,second;//(5)三个整型的数据成员hour,minute和second的定义};Time::Time(inth,intm,ints){hour=h;minute=m;second=s;}voiddisplay(Time&t){cout<<t.hour<<":"<<t.minute<<":"<<t.second<<endl;}//(6)在同一行按hh:mm:ss格式输出三个数据成员的值,且输出之后要换行。intmain(){Timet1(10,13,56);//(7)用10、13和56作实参,定义对象t1display(t1);//(8)用t1作实参调用友元函数displayreturn0;}3.下面程序的功能是定义类sample,并输出其数据成员,请填空:#include<iostream>usingnamespacestd;classsample//(1)类的定义{intm;staticintn;//(2)定义整型静态数据成员npublic:sample(inti){n++;m=i;}voiddisp()//(3)成员函数disp的函数首部{cout<<"m="<<m<<"\n"<<"n="<<n<<endl;}};intsample::n=0;//(4)为整型静态数据成员n赋初值0intmain(){samples1(3),s2(4);s1.disp();s2.disp();return0;}4.下面程序的功能是重载后置自增1运算符,以实现时钟对象增1操作。#include<iostream>usingnamespacestd;classClock{public:Clock(inth=0,intm=0,ints=0):hour(h),minute(m),second(s){}voidshowTime()//(5)常成员函数showTime()的首部{cout<<hour<<":"<<minute<<":"<<second<<endl;}Clockoperator++(int);//(6)后置++的重载函数原型声明private:inthour,minute,second;};ClockClock::operator++(int){Clockold=*this;second++;if(second>=60){second%=60;minute++;if(minute>=60){minute%=60;hour=(hour+1)%24;}}returnold;//(7)函数的返回值}intmain(){ClockmyClock(23,59,59);cout<<"Firsttimeoutput:";myClock.showTime();cout<<"ShowmyClock++:";myClock++.showTime();//(8)调用后置++重载函数并输出增1之前的对象的数据成员值return0;}5.下面是一段包含构造函数和析构函数的C++程序。#include<iostream>#include<string>usingnamespacestd;classStudent//(1)定义类Student{public://(2)类的对外接口Student(intn,stringnam,chars)//(3)构造函数的函数首部{num=n;name=nam;sex=s;cout<<"Constructoriscalled."<<endl;}~Student()//(4)析构函数的函数首部ﻩ{cout<<"Destructoriscalled."<<endl;}voiddisplay()//(5)成员函数display()的函数首部ﻩ{cout<<"num:"<<num<<endl;ﻩcout<<"name:"<<name<<endl;ﻩcout<<"sex:"<<sex<<endl;}private://(6)私有成员声明intnum;stringname;charsex;//(7)定义三个数据成员num为整型、name为string型,sex为字符型};intmain(){Studentstud1(10010,"Wang_li",'f');stud1.display();//(8)通过对象stud1调用成员函数display();Studentstud2(10011,"Zhang_feng",'m');stud2.display();return0;}五、判断题[×]1.protected继承中,派生类的成员函数可以直接访问基类中的所有成员。[×]2.派生类只从一个基类派生,不可以从多个基类派生。[√]3.双目运算符重载为类的友元函数时,说明两个形参;重载为类的成员函数时,只有一个形参。[√]4.若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。[×]5.析造函数不能虚函数,但构造函数可以是虚函数。[×]6.基类的所有成员都能被派生类继承。[√]7.若类中没有明拟定义构造函数,则系统会自动生成一个函数体为空的默认构造函数。[×]8.在C++语言中,函数形参所带的默认值必须按照从左到右的顺序设立。[×]9.C++语言中,单继承的派生类的析构函数的执行顺序是先执行派生类的析构函数,再执行基类的析构函数。[t]10.基类中的成员在派生类中的访问属性取决于继承方式及其在基类中的访问属性。[×]11.在C++语言中,类的数据成员和成员函数的存储方式是完全同样的。[√]12.类是对象的抽象,对象是类的具体实例。[√]13.友元关系是单向的、不可传递的,也是不能被继承的。[√]14.所谓命名空间,事实上就是一个由程序设计者命名的内存区域。[√]15.在程序的运营阶段,通过让基类指针指向不同的派生类对象,从而把虚函数和类对象“绑定”在一起,这一过程称为静态关联,相应的多态性称为编译时的多态性。[×]16.内联函数中可以涉及任何符合C++语法的语句。[×]17.可以在类定义体内定义静态数据成员并进行初始化。[√]18.在类中,假如不作特别说明,所有成员的访问属性均为私有类型。[√]19.假如一个函数先被调用,后被定义,则应在主调函数中对被调函数进行原型声明。[×]20.在类中,假如不作特别说明,所指的成员函数均为公有类型。[×]21.switch语句中,default子句必须放在最后。[×]22.派生类中保护继承的基类成员的访问权限到派生类保持不变。[√]23.友元关系是单向的、不可传递的,不能被继承的。[×]24.常成员函数既能引用数据成员的值,也能改变数据成员的值。[×]25.构造函数没有返回值,所以构造函数不能重载。[√]26.C++语言中模板分为函数模板和类模板两种。[×]27.new运算符不能对动态分派的数组存储区进行初始化。[×]28.C++语言规定,函数的定义可以嵌套,但函数的调用不可以嵌套。[√]29.使用内联函数是以增大空间开销为代价的。[×]30.在C++中,编译时的多态性是通过函数和运算符的重载实现的。[×]31.成员函数一定是内置函数。[×]32.break语句可以出现在各种C++语句中。[√]33.对单目运算符重载为友元函数时,说明一个形参;重载为成员函数时,不能显式说明形参。[√]34.假如对静态存储类别的数值变量未赋初值,则默认值为0。[×]35.构造函数不能被继承,但析构函数可以被继承。[×]36.在C++语言中,实参与形参占用相同的存储单元。[√]37.构造函数在说明对象时自动执行。[×]38.while循环与do—while循环执行过程完全相同。[√]39.在多继承情况下,派生类的构造函数中基类构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序。[√]40.派生类中继承的基类成员的访问权限取决于继承方式。[×]41.在对程序进行编译的过程中,会发现注释中的拼写错误。[√]42.已知:intm=10;则int&×=m;是对的的。[√]43.C++语言允许使用友元,但是友元会破环封装性。[√]44.预解决过程是编译过程之前进行的。[×]45.C++语言中函数返回值的数据类型是由return语句后面的表达式的数据类型决定的。[√]46.类与对象的关系和数据类型与变量的关系相同。[×]47.成员函数一定是内置函数。[√]48.构造函数在说明对象时自动执行。[√]49.C++中引进了类和对象的概念,从而使得C语言发生质变,即从面向过程变成面向对象。[×]50.构造函数名字可以和类不同。[×]51.派生类中继承的基类成员的访问权限到派生类保持不变。[√]52.在C++中,每个对象都是由数据和函数两部分组成的。[×]53.对每个可重载的运算符来讲,它既可以重载为友元函数,又可以重载为成员函数,还可以重载为非成员函数。[√]54.C++中引进了引用的概念,给编程带来了很多方便。[√]55.使用内联函数是以增大空间开销为代价的。[×]56.派生类是从基类派生出来,它不能再生成新的派生类。[√]57.某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。[√]58.解决多继承情况下出现的二义性的方法之一是使用成员名限定法。[×]59.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。[×]60.抽象类是指一些没有说明对象的类。六、编写程序1.编写程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个虚函数printArea分别计算这三种图形的面积,3个图形的数据在定义对象时给定。#include<iostream>#include<cmath>usingnamespacestd;classShape{public:Shape(doubler){radius=r;}virtualvoidﻩprintArea()=0;protected:doubleradius; };classCircle:publicShape{public:ﻩCircle(doublea):Shape(a){}ﻩvoidprintArea()ﻩ{cout<<"areaofcircleis"<<3.14159*radius*radius<<endl;}};//下面是派生类Rectangle和Triangle类的定义与相关函数的实现classRectangle:publicShape{public:ﻩRectangle(doublea,doubleb):Shape(a),width(b){} voidprintArea()ﻩ{cout<<"areaofrectangleis"<<radius*width<<endl;}private:ﻩdoublewidth;};classTriangle:publicShape{public: Triangle(doublea,doubleb,double(c)):Shape(a),length(b),width(c){} voidprintArea()ﻩ {cout<<"areaoftriangleis"<<(radius+length+width)*0.5<<endl;}private:ﻩdoublelength,width;};intmain(){Shape*p;//定义基类指针Circlec(1.0);//定义派生类对象Rectangler(1.0,2.0);//定义派生类对象Trianglet(3,4,5);//定义派生类对象p=&c;//基类指针指向派生类对象p->printArea();//通过基类指针调用虚函数,实现运营时的多态性p=&r;p->printArea();p=&t;p->printArea();return0;}2.定义一个复数类Complex,重载运算符“+”,使之能实现两个复数的相加运算(规定将其定义为类的友元函数)。本题中主函数已经定义,请按照主函数中数据的运算,实现类的定义及类中成员的实现。#include<iostream>usingnamespacestd;classComplex{public: Complex(){real=0;image=0;}ﻩComplex(doublea,doubleb){real=a;image=b;} friendComplexoperator+(Complex&c1,Complex&c2);ﻩvoiddisplay(){cout<<real<<"+"<<image<<"i"<<endl;}private: doublereal,image;};Complexoperator+(Complex&c1,Complex&c2){returnComplex(c1.real+c2.real,c1.image+c2.image);}intmain(){Complexr1(1.1,2.2),r2(3.3,4.4),r3;//定义三个Complex类的对象r1.display();//调用成员函数实现对象的输出r2.display();r3=r1+r2;//调用运算符的重载函数,实现两个复数相加r3.display();return0;}3.设计一个长方体类box,其数据成员涉及length(长)、width(宽)、height(高)。规定用成员函数实现以下功能:(1)由键盘输入长方体的长、宽、高;(2)计算并输出长方体的体积;(3)计算并输出长方体的表面积#include<iostream>usingnamespacestd;classbox{public:box(){cout<<"pleaseinputlength=";cin>>length;cout<<"pleaseinputwidth=";cin>>width;cout<<"pleaseinputheight=";cin>>height;}voidgetarea(){cout<<"areais"<<(length*width+length*height+height*width)*2<<endl;}voidgetvolume(){cout<<"volumeis"<<length*width*height<<endl;}private:doublelength,width,height;};intmain(){boxa;a.getarea();a.getvolume();return0;4.定义一个Tree(树)类,有数据成员ages(树龄),成员函数grow(intyears)对ages加上years,age()用于显示对象tree的ages的值。在主函数中对所定义的成员函数进行测试。#include<iostream>usingnamespacestd;classTree{public:ﻩTree(){ages=0;} Tree(inta){ages=a;}ﻩvoidgrow(intyears){ages+=years;} voidage(){cout<<"trssagesis"<<ages;}private: intages;};intmain(){Treet(3);t.grow(5);t.age(); }5.定义一个订书单中使用的图书信息类Book,每个Book类对象代表的是订书单中的一种图书,包含内容如下:(1)数据成员BookID(字符串),表达图书编号;数据成员Quantity(int型),表达订购的图书数量;数据成员Price(float型),表达图书单价。(2)构造函数,功能是使用参数为数据成员赋值;(3)成员函数Total,功能是计算一个图书对象的应付金额;(4)成员函数BookInfo,功能是在一行上显示一个图书对象的图书编号、订书数量和单价。(5)定义一个普通函数Sum,该函数的功能是计算一张订书单上所有图书的总金额。(6)定义main()函数,重要功能是:①定义一个Book类的对象数组,用于存放一张订书单的信息;②从键盘输入订书单上每种图书的信息;③调用Sum()函数,计算订书单上所订图书的总金额;④按如下格式显示一张订书单上的订书信息和总金额#include<iostream>#include<iomanip>usingnamespacestd;classBook{public:Book(stringbid,intqu,floatpr);floattotal(){returnquantity*price;}voidBookInfo();private:stringBookID;intquantity;floatprice;};Book::Book(stringbid,intqu,floatpr){BookID=bid;quantity=qu;price=pr;}voidBook::BookInfo(){cout<<setw(15)<<BookID<<setw(13)<<quantity<<setw(13)<<price<<endl;}floatsum(Booka[],intn){floats=0;for(inti=0;i<n;i++)s+=a[i].total();returns;}intmain(){Bookb[3]={Book("100001",20,15.4),Book("100002",35,21.7),Book("100003",78,42.1)};cout<<"====================订书单===================="<<endl;cout<<setw(15)<<"图书编号"<<setw(14)<<"数量"<<setw(12)<<"单价"<<endl;for(inti=0;i<3;i++)b[i].BookInfo();cout<<"=============================================="<<endl;cout<<"总额="<<sum(b,3);return0;}6.定义一个复数类Complex,重载运算符“+”,使之能实现两个复数的相加运算(规定将其定义为类的成员函数)。本题中主函数已经定义,请按照主函数中数据的运算,实现类的定义及类中成员的实现。#include<iostream>usingnamespacestd;classComplex{public: Complex(){real=0;image=0;} Complex(doublea,doubleb){real=a;image=b;}ﻩComplexoperator+(Complex&c);ﻩvoiddisplay(){cout<<real<<"+"<<image<<"i"<<endl;}private:ﻩdoublereal,image;};ComplexComplex::operator+(Complex&c){returnComplex(real+c.real,image+c.image);}intmain(){Complexr1(1.1,2.2),r2(3.3,4.4),r3;//定义三个Complex类的对象r1.display();//调用成员函数实现对象的输出r2.display();r3=r1+r2;//调用运算符的重载函数,实现两个复数相加r3.display();return0;}7.设计一个类为tc,包含的私有数据成员有:unlead(无铅汽油)、lead(有铅汽油)、total(当天总收入)以及两类汽油的单价。无铅汽油的价格是17元/公升,有铅汽油的价格是16元/公升。规定:(1)在构造函数中设立各种汽油的价格;(2)定义成员函数setdate(),用于输入当天售出的汽油量,并计算当天的总收入;(3)定义普通成员函数disp(),用于输出当天的总收入;(4)在主函数中定义tc类的对象t,并用其测试所定义的成员函数。#include<iostream>usingnamespacestd;classtc{public:ﻩtc(){unlead=0;lead=0;}ﻩvoidsetdate(){cin>>unlead;cin>>lead;}ﻩdoubletatol(){return(unlead*17+lead*16);}ﻩdoubledisp(){cout<<tatol()<<endl;}private: inta,b; doubleunlead,lead;};intmain(){ tca; a.setdate();ﻩa.disp();return0;}ﻬ8.设计一个长方体类box,其数据成员涉及length(长)、width(宽)、height(高)。规定用成员函数实现以下功能:(1)构造函数:由键盘输入长方体的长、宽、高;(2)计算并输出长方体的体积;(3)计算并输出长方体的表面积;(4)设计一个main()函数,定义一个长方体类的对象,并输出长方体的表面积和体积。#include<iostream>usingnamespacestd;classbox{public:box(){cout<<"pleaseinputlength=";cin>>length;cout<<"pleaseinputwidth=";cin>>width;cout<<"pleaseinputheight=";cin>>height;}voidgetarea(){cout<<"areais"<<(length*width+length*height+height*width)*2<<endl;}voidgetvolume(){cout<<"volumeis"<<length*width*height<<endl;}private:doublelength,width,height;};intmain(){boxa;a.getarea();a.getvolume();return0;9.编写一个程序计算正方体(cube)和圆柱体(cylinder)的体积。规定:(1)定义一个抽象类shape,在其中定义求体积的纯虚函数volume()。(2)抽象类中定义受保护的数据成员radius,可作为正方体的边长或圆柱体的底面圆的半径。(3)由抽象类派生出要描述的2个类cube和cylinder,在这2个类中要将求体积的函数实现。(4)设计一个main()函数,定义一个圆柱体类的对象,并输出圆柱体的体积。#include<iostream>#definePI3.1415926usingnamespacestd;classshape{public:shape(doubler){radius=r;}//构造函数的定义virtualdoublevolume()=0;//纯虚函数volume()的定义protected: doubleradius;//数据成员的定义};classcube:publicshape//cube类公有继承shape类{public:cube(doubler):shape(r){}doublevolume(){return(radius*radius*radius);}//运用虚函数计算正方体的体积};classcylinder:publicshape//类cylinder公有继承shape类{public:cylinder(doubler,doubleh):shape(r){height=h;}doublevolume(){return(radius*PI*radius*height);}//运用虚函数计算圆柱体的体积private:ﻩﻩdoubleheight;//定义圆柱体的数据成员,用于表达其高}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论