




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、填空题(每空1分,共15分,将对的答案写在()中)1.C++中有两种数据类型:(整型)和(字符型)可以使用signed修饰符。在C++中,用数组、指针、和(引用)作为函数参数,可以将参数值带回。2.为了减少函数调用的时间开销,提议将小的调用频繁的函数定义为(内联函数),措施是在函数类型前加上(inline)关键字。3.面向对象的程序设计有四大特性,它们是抽象、封装、(继承)、(多态)。4.拷贝构造函数是在用一种对象初始化另一种对象时被调用,系统缺省的拷贝构造函数的工作措施是(拷贝每一种数据组员)。或逐一拷贝5.用new申请某一种类的动态对象数组时,在该类中必须可以匹配到(默认)构造函数,否则应用程序会产生一种编译错误。6.静态数据组员必须在类外进行初始化,且静态数据组员的一种拷贝被类的所有对象(共享)。7.在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型(有一种不一样)。8.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的(封装)特性。9.预编译指令由三种,它们是:文献包括、(宏定义)(条件编译)10.静态的组员函数没有隐含的(this指针),因此,它们只能直接访问类的静态的数据组员。11.在C++中,函数的参数有两种传递方式,它们是值传递和(引用传递)。12.当非静态组员函数被调用时,该组员函数的(this指针)指向调用它的对象。13.拷贝构造函数使用(一种已经存在的对象)作为参数初始化创立中的对象。14.在公有继承的状况下,基类数据组员在派生类中的访问权限(保持不变)。15.在C++中,构造派生类对象时,总是先从(基类)的初始化开始的。16.当需要记录程序中某个类创立对象的个数时,需要给该类定义(静态数据)组员。17.在多种类之间有反复继承时,为防止被反复继承的基类数据组员在内存中有多种拷贝,应将该基类定义为(虚基类)。18.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为(抽象类),定义该类至少具有一种(纯虚函数)。19.在C++中构造一种对象时,其数据组员在构造函数中初始化。对于内嵌的对象、(常量)(基类)数据组员需要在构造函数的组员初始化列表中初始化。20.在类的定义中,阐明为protected的数据组员称为保护组员。保护数据组员具有双重作用:对于其派生类而言,(是公有的);而对于其外部的程序而言,(是私有的)。21.控制格式输出的操纵符中,(setprecision)是设置数据精度的,(hex)是设置十六进制的。22.假如s是int型变量,且s=6,则下面s%2+(s+1)%2体现式的值为___1_。23.已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则体现式ch=’a’+4’的值为__e__。24.数组与函数参数联络亲密,当用数组元素作函数参数时,这是属于值传递;当数组名作为参数时,这是属于引用传递,对形参的变化可影响到实参。25.运用“对象名.组员变量”形式访问的对象组员仅限于被申明为public的组员;若要访问其他组员变量,需要通过组员函数或友元函数函数。26.一种__类__和_对象__的关系,正如基本数据类型与该类型的变量一种。27.类组员的默认访问方式是__私有___.28.一种类有_多种_个构造函数,有___一种__析构函数。29.类的__静态__组员函数不能对类中的非静态组员进行默认访问。30.假如阐明类B是类A的友元类,则类B的所有组员函数都是类A的__友元函数____。31.运用组员函数对二元运算符重载,其左操作数为this指针右操作数为组员函数参数。32.类有两种使用方法:一种是类的实例化,即生成类的_对象_____;另一种是通过__继承_____派生出新的类。33.运算函数中的关键字是_operator_____,它和运算符一起构成该运算符函数的函数名。34.假如一种类中有一种或多种纯虚函数,则这个类称为__抽象类____。35.文献的打开是通过通过使用类_fstream__的组员函数___open()_____来实现的。36.设所有变量均为整型,则体现式(e=2,f=5,e++,f++,e+f)的值为_9_。37.已知c的ASCII码为十进制数99,设k为字符型变量,则体现式k=‘c’+1的值为___d_____。38.函数的形参在未被调用之前不会分派空间,函数的形参的个数和类型要和实参的相似。39.类的组员分为数据组员和_组员函数______。40.类完毕了面向对象程序设计的__封装___特性。41.构造函数是__对象____被创立时自动执行,对象消失时自动执行的组员函数称为__析构函数_____对象42.C++将类继承分为单继承和多继承两种。43.在继承机制下,当对象消灭时,编译系统先执行派生类的析构函数,然后才执行派生类中子对象类的析构函数,最终执行基类的析构函数。44.类的__public__数据组员是类所有对象共享的组员。45.友元函数__不是_类的组员函数。(是/不是)46.假如类A继承了类B,则类A称为___派生类____,类B称为____基类___。47.运算符重载后,原运算符的优先级和结合特性___不会__变化。(会/不会)48.___纯虚函数___是一种在基类中阐明的虚函数,但未给出详细的实现,规定在其派生类实现。49.文献的关闭是通过通过使用类__fstream__的组员函数__close()______来实现的。二、选择题1.面向对象的(B)是一种信息隐蔽技术,目的在于将对象的使用者与设计者分开。不容许使用者直接存取对象的属性,只能通过有限的接口与对象发生联络。A.多态性B.封装性C.继承性D.重用性2.C++的合法注释是(B)。A./*ThisisaCprogram/*B.//ThisisaCprogramC.“ThisisaCprogram”D./*ThisisaCprogram//3.有关C++和C语言的描述中,(D)是错误的?A.C是C++的一种子集B.C程序在C++环境可以运行C.C++程序在C环境可以运行D.C++是面向对象的而C是面向过程的4.运算符+、<=、=、%中,优先级最低的运算符是(C)。A.+B.<=C.=D.%5.已知a=4,b=6,c=8,d=9,则“(a++,b>a++&&c>d)?++d:a<b”值为(D)。A.9B.6C.8D.0(假)6.对while、do…while循环构造,下面说法对的的是(B)。A.只是体现形式不一样 B.do…while构造中的语句至少执行一次(先执行后判断)C.while构造中的语句至少执行一次D.条件成立时,它们有也许一次也不执行7.对中断语句的说法下面不对的的是(B)。A.顾客可以指定中断的位置B.顾客可以指定转移的位置C.break语句可以跳出本循环D.continue语句可以结束本次循环8.如下对的的说法是()。A.顾客若需要调用原则函数,调用前必须重新定义B.顾客可以直接调用所有原则库函数C.顾客可以定义和原则库函数重名的函数,不过在使用时调用的是系统库函数9.下列哪个不是重载函数在调用时选择的根据()。A.参数类型B.参数个数C.函数类型D.函数名10.对数组名作函数的参数,下面描述对的的是(B)。A.数组名作函数的参数,调用时将实参数组复制给形参数组B.数组名作函数的参数,主调函数和被调函数共用一段存储单元C.数组名作参数时,形参定义的数组长度不能省略D.数组名作参数,不能变化主调函数中的数据12.在定义一种共用体变量时,系统为其分派存储空间的原则是(B)。A.按所有组员需要的存储空间总和分派。B.按组员中占存储空间最大者分派。C.按组员占存储空间最小者分派。D.按第一种组员所需的存储空间分派。13.下面(B)项是对构造函数和析构函数的对的定义。A.voidX::X(),voidX::~X()B.X::X(参数),X::~X()(析构括号没参数)C.X::X(参数),X::~X(参数)D.voidX::X(参数),voidX::~X(参数)14.拷贝构造函数具有的下列特点中,(D)是错误的。A.
假如一种类中没有定义拷贝构造函数时,系统将自动生成一种默认的B.
拷贝构造函数只有一种参数,并且是该类对象的引用C.拷贝构造函数是一种组员函数D.拷贝构造函数的名字不能用类名A.一般组员函数B.类的初始化C.对象初始化D.删除对象16.下列对派生类的描述中,(D)是错误的。A.一种派生类可以作为另一种派生类的基类B.派生类至少有一种基类C.派生类的组员除了它自己的组员外,还包括了它的基类组员D.派生类中继承的基类组员的访问权限到派生类保持不变A规律性B.传递性C.反复性D.多样性A.构造函数B.虚函数C.析构函数D.友元函数19.下列有关动态联编的描述中,错误的是(D)。A.动态联编是以虚函数为基础B.动态联编是运行时确定所调用的函数代码的C.动态联编调用函数操作是指向对象的指针或对象引用D.动态联编是在编译时确定操作函数的(假如已经确定还谈什么动态)20.有关纯虚函数和抽象类的描述中,错误的是(C)。A.纯虚函数是一种特殊的虚函数,它没有详细的实现B.抽象类是指具有纯虚函数的类C.一种基类中阐明有纯虚函数,该基类派生类一定不再是抽象类(假如派生类没有重新定义纯虚函数,而派生类只是继承基类的纯虚函数,则这个派生类仍然还是一种抽象类)D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出21.C++源文献的扩展名为(A)。A.cppB.cC.txtD.exe22.在C++语言中,(A)的陈说是对的的。A.能使用关键字并辨别大小写B.能使用关键字并不辨别大小写C.不能使用关键字并辨别大小写D.不能使用关键字并不辨别大小写23.运算符+、=、*、>=中,优先级最高的运算符是(C)。A.+B.=C.*D.>=24.下列不合法的变量名为(A)。A.intB.int1C.name_1D.name025.已知x=43,ch=‘A’,y=0;则体现式(x>=y&&ch<’B’&&!y)的值是(C)。A.0B.语法错C.1(!y=!0=1只有!0为1,其他都为0)D.“假”26.如下不对的的是(C)。 A.语句for(i=0;;i++)表达无限循环B.for(;;)表达无限循环C.for()也表达无限循环(B才对)D.while(1)表达无限循环27.在函数的返回值类型与返回值体现式的类型的描述中,错误的是()。A.函数返回值的类型是在定义函数时确定,在函数调用时是不能变化的B.函数返回值的类型就是返回值体现式的类型(看ACD)D.函数返回值类型决定了返回值体现式的类型28.假如一种函数无返回值,定义时它的函数类型应是(C)。A.任意B.intC.voidD.无29.在C++语言中,有关参数默认值的描述对的的是(B)。A.只能在函数定义时设置参数默认值B.设置参数默认值时,应当从右向左设置(如inta,b,c=1,d=33)C.设置参数默认值时,应当所有设置D.设置参数默认值后,调用函数不能再对参数赋值30.若有如下定义,则说法错误的是(D)。 inta=100,*p=&a;A.申明变量p,其中*表达p是一种指针变量B.变量p经初始化,获得变量a的地址C.变量p只可以指向一种整形变量D.变量p的值为100(获得变量a的地址)31.列有关构造体的说法错误的是(D)。A.构造体是由顾客自定义的一种数据类型B.构造体中可设定若干个不一样数据类型的组员C.构造体中组员的数据类型可以是另一种已定义的构造体D.在定义构造体时,可认为组员设置默认值32.下列有关类的说法不对的的是(C)。A.
对象是类的一种实例B.
任何一种对象只能属于一种详细的类C.
一种类只能有一种对象D.类与对象的关系和数据类型与变量的关系相似33.(C)的功能是对象进行初始化。A.析构函数B.数据组员C.构造函数D.静态组员函数34.有关友元的描述中,(A)是错误的。A.
友元函数是组员函数(不能),它被阐明在类体内B.
友元函数可直接访问类中的私有组员C.
友元函数破坏封装性,使用时尽量少用D.
友元类中的所有组员函数都是友元函数35.了使类中的某个组员不能被类的对象通过组员操作符访问,则不能把该组员的访问权限定义为(A)。A.publicB.protectedC.privateD.static36.派生类的对象对它的(A)是可以访问的。A.公有继承的基类的公有组员B.公有继承的基类的保护组员C.公有继承的基类的私有组员D.保护继承的基类的公有组员37.多继承派生类构造函数构造对象时,(B)被最先调用。A.派生类自己的构造函数B.虚基类的构造函数C.非虚基类的构造函数D.派生类中子对象类的构造函数38.C++类体系中,不能被派生类继承的有(A)。A.构造函数(构造函数和析构函数都不可被派生类继承)B.虚函数C.静态组员函数D.赋值操作函数39.编译时的多态性可以通过使用(C)获得。A.虚函数和指针B.重载函数和析构函数C.虚函数和对象D.虚函数和引用40.下列描述中,(D)是抽象类的特性。A.可以阐明虚函数B.可以进行构造函数重载C.可以定义友元函数D.不能阐明其对象三、指出并改正下列程序段中的语法错误。(6×2,12分)题目答案1. floatx=3.26f; int&ref1=x;1.float&refl=x;2. intd1=3,d2=2; int*constdp=&d1; dp=&d2; *dp=5;2.去掉const3.//Nums为已定义的类Nums*fp; fp=newint[4];3.int改为Nums4.voidfunc(intfirst,int2_secnd);4.voidfunc(intfirst,intsecnd);数字不能在开头5.voidPixel::operator=(Pixel&p1,Pixel&p2);5.Pixel&Pixel::operator=(Pixel&p1);6.//Pixel有两个整型组员x和yPixelPixel::operator+=(Pixle&p)const{ x+=p.x;y+=p.y; return*this;}6.去掉const2、指出并改正下列程序段中的语法错误。(6×2,12分)题目答案1. intx=13; constint&ref=x; ref=10;1.去掉const2.double*fp; fp=newint(3);2.double改成int3.voidfunc(first,intsecnd);3.voidfunc(intfirst,intsecnd);4.//Pixel有两个整型组员x和y,其拷//拷贝构造函数定义如下:voidPixel(constPixle&p);4Pixel(constPixle&p);5.friendPixel&operator=(Pixel&p1,Pixel&p2);5.Pixel&operator=(Pixel&p1);6.//Pixel有两个整型组员x和yPixelPixel::operator++(int){ x++; y++; return*this;}(返回值不能确定是哪个)6.PixelPixel::operator++(int){Pixeltemp;temp.x=x++;temp.y=y++;returntemp;}四、程序填空1.编写函数将字符串按逆序寄存。#include<iostream.h>#include<stdio.h>//put()#include<string.h>voidmain(){ inti,n; chars[100],temp; cout<<"inputstring:"<<endl; cin>>s;//(1)注意它的使用方法! n=strlen(s);(2) for(i=0;i<n/2;i++) { temp=s[i];s[i]=s[n-i-1];s[n-i-1]=temp; }//前后调换 cout<<"Now,string:"<<endl; puts(s);//输出新排列的字符串S}2.下列程序定义了类Pixel,请完毕前置++和后置++的运算符函数的定义。(注意这道题!)classPixel{ intx,y;public: Pixel(intxx=0,intyy=0){x=xx;y=yy;} Pixeloperator++(); Pixeloperator++(int); voiddisplay();};PixelPixel::operator++(){ x++; y++; return*this(3)}PixelPixel::operator++(int){s Pixeltemp=*this;(4) x++; y++; return(5)temp;}voidPixel::display(){ cout<<"("<<x<<","<<y<<")"<<endl;}3.根据给定的程序执行成果,将下列程序补充完整。#include<iostream.h>classBase{public: virtual~Base(){cout<<”DeleteBase”<<endl;}(6)};classDerived:publicBase{public: ~Derived(){cout<<”DeleteDerived”<<endl;}(7)};voidmain(){ Base*p1=newDerived;(8) deletep1;//Derived先得出成果,故也许为析构函数。//释放了P1就自动调用~Derived()析构函数。就不执行~Base(),故~Base()是虚函数。}程序的执行成果如下:DeleteDerivedDeleteBase4.定义一种字符串类String,有两个私有数据组员:char*content和intlen;规定1)在构造函数中提醒顾客输入字符串,;2)顾客能提取和显示字符串;(分别由两个函数完毕)3)实现对字符串中所有小写字母变成大写,并显示。注意内存的分派与释放。类定义的部分代码如下,请补充代码使类的定义完整。#include<iostream.h>#include<string>#include<stdlib.h>classString{ char*content; intlen;public: String(); ~String(){delete[]content;(1)} voiddisplay(); voidupper_str(); char*get_str()const{returncontent;(2)}};String::String(){ charch[50]; cout<<"enterastring:\n"; cin>>ch; len=strlen(ch); content=newchar[len+1];(3) if(!content) { cout<<"Memoryallocationeror!"; exit(1); } strcpy(content,ch);}voidString::display(){ cout<<content<<"have"<<len<<"characters."<<endl;}voidString::upper_str(){ for(inti=0;i<len;i++) if(content<=’z’&&content>=’a’)(4) content[i]=toupper(content[i]);(5)}5.下列程序定义了类Point,请完毕前置--和后置--的运算符函数的定义。classPoint{ floatx,y;public: Point(floatxx=0,floatyy=0){x=xx;y=yy;} Pointoperator--(); Pointoperator--(int); voiddisplay();};PointPoint::operator--(){ x--; y--; return*this;(6)}PointPoint::operator--(int){ Pointtemp=*this;(7) x--; y=y--; returntemp;(8)}voidPoint::display(){ cout<<"("<<x<<","<<y<<")"<<endl;}6、程序填空,直接将答案写在空行上(6×2,12分)1.#include<iostream.h>_//_1_classA{ inta;public: A(inti){a=i;} voidprint(){cout<<a<<endl;}};classB{ Aobj_a; intb;public: __B(intj,inti):obj_a(j)//2_{b=i;} voidprint();};voidB::print()//3_{ obj_a.print(); cout<<b<<endl;}intmain(){ Bobj_b(3,4); obj_b.print(); return0;}2.#include<iostream.h>#include<math.h>classComplex{ doublereal,image;public: Complex(doubler=0,doublei=0){real=r;image=i;};friendostream&operator<<(ostream&output,Complex&obj);};ostream&operator<<(ostream&output,Complex&obj){output<<obj.real<<obj.image;returnoutput;6;}intmain(){ Complexc; cout<<c;return0;}//重载<<五、写出程序的运行成果1.(3分)#include<iostream.h>intmain(void){ charstr[]="configuration"; char*p=str; cout<<p<<endl;for(inti=0;i<sizeof(str);i=i+2) cout<<str[i]; cout<<endl;//字符c的ASCII码是99 for(i=0;i<4;i++) cout<<*p+i<<'';//假如是*(p+i)就是输出字符,否者输出ASCII码 cout<<endl; return0;}第第1题的运行成果如下:configurationcniuain991001011022.(4分)#include<iostream.h>classNode{public: intdata;第2题程序运行成果:输入第2题程序运行成果:输入2a显示2->*Node(intd,Node*q=0){data=d;next=q;}};intmain(){ intn; Node*p; Node*q=0; while(cin>>n){ p=newNode(n,q); q=p; } for(;p;p=p->next) cout<<p->data<<"->"; cout<<"*\n"; return0;}//假定,输入如下3个数据:234567↙3.(3分)#include<iostream.h>classConstTest{ intm1,m2;public: ConstTest(intx,inty){m1=x;m2=y;}voidprint(){cout<<m1<<","<<m2<<endl;} voidprint()const;};voidConstTest::print()const{ cout<<"constfun:"<<m1+m2<<endl;}intmain(){ ConstTesta(6,9); a.print(); constConstTestb(2,5);第3题程序运行成果:6,9第3题程序运行成果:6,9constfun7 return0;}4. (8分)#include<iostream.h>classPlane{protected: intx,y;public: Plane(inta,intb){x=a;y=b;} virtualvoidprint() {cout<<'('<<x<<','<<y<<')'<<endl;} virtualvoidincrease(intd);};classSolid:publicPlane{ intz;public: Solid(inta,intb,intc):Plane(a,b){z=c;} voidprint() {cout<<'('<<x<<','<<y<<','<<z<<')'<<endl;} voidincrease(intd);};voidPlane::increase(intd){x+=d;y+=d;}voidSolid::increase(intd){x+=d;y+=d;z+=d;}//接右边的代码intmain(){ Planed1(3,6); Solidd2(2,7,9); Plane*ptr; ptr=&d1; ptr->print(); ptr=&d2; ptr->print(); ptr->increase(4); ptr->print(); d2.print();(3,6)(2,7,9)(6,11,13)(3,6)(2,7,9)(6,11,13)(6,11,13)第4题运行成果:Plane设为虚,则相似函数取不为虚的即solid。即两个都为(6,11,13)。但假如变量不一样则虚函数不执行还是本来的如(3,6)(2,7,9)(3,6)(2,7)(6,11)(3,6)(2,7)(6,11)(6,11,9)第5题运行成果:假如没有虚函数则以第一种为基础,第二个不执行,即第二个的printf和increase不执行6.(3分)#include<iostream.h>classCount{ staticintcount;public: Count(){count++;} staticintGetc(){returncount;} ~Count(){count--;}};intCount::count=100;intmain(void){ Countc1,c2; cout<<Count::Getc()<<endl;{//执行完里面才执行析构函数 Countc[3]; cout<<Count::Getc()<<endl; }//执行虚构函数 cout<<Count::Getc()<<endl;return0;}第6题1021051021051021.(3分)#include<iostream.h>voidmain(void)//里面的void有无同样{ charstring[]="fortunate"; char*p=string; cout<<string<<endl; cout<<*p<<*(p+2)<<*(p+4)<<*(p+6)<<endl; for(inti=1;i<sizeof(string);i+=2)fortunatefortunatefruaotnt}a是偶数a是奇数1a是偶数a是奇数1#include<iostream.h>voidmain(){ inta; cout<<"pleaseinputanumber:"; cin>>a; switch(a%2) { case0:cout<<"a是偶数"<<endl;//少了break,程序会自动自行下一种语句 default:cout<<"a是奇数"<<endl; } a=a/4; cout<<a<<endl;}假如输入数为6,则输出成果是什么?3. (3分)#include<iostream.h>classCount{ staticintcount;public: Count(){count++;} staticintGetc(){returncount;} ~Count(){count--;}};intCount::count=10;voidmain(void){ Countc1,c2; cout<<Count::Getc()<<endl; { Countc3; cout<<Count::Getc()<<endl; } cout<<Count::Getc()<<endl;}答案前面提到过类似题目!121213124. (3分)#include<iostream.h>classPoint{ intx,y;public:Point(inta=0,intb=0){x=a;y=b;}voidmove(intxoffset,intyoffset){x+=xoffset;y+=yoffset;}intgetx(){returnx;}intgety(){returny;}};classRectangle:publicPoint{ intlength,width;public:Rectangle(intx,inty,intl,intw):Point(x,y) {length=l;width=w;}intgetlength(){returnlength;}intgetwidth(){returnwidth;}33,66,4,9};33,66,4,9voidmain(){ Rectangler(0,0,4,9); r.move(33,66); cout<<r.getx()<<","<<r.gety()<<","<<r.getlength()<<","<<r.getwidth()<<endl;}5. (6分)#include<iostream.h>classBase {public: virtualvoidshow(){cout<<"Base::show()"<<endl;} };classDerived1:publicBase {public: voidshow(){cout<<"Derived1::show()"<<endl;} };classDerived2:publicDerived1 {public: voidshow(){cout<<"Derived2::show()"<<endl;}};voidmain() { Baseb; Derived1d1; Derived2d2; Base*ptr[3]={&b,&d1,&d2}; for(inti=0;i<3;i++) ptr[i]->show();Base::show()Base::show()Derived1::show()Derived2::show()6.去掉上题(即第5小题)程序中的“virtual”关键字,运行成果怎样?(6分)BaseBase::show()Base::show()Base::show()1.(3分)#include<iostream.h>voidmain(void){ charstr[]="safety"; char*p=str; cout<<str<<endl; cout<<*p<<*(p+2)<<*(p+4)<<endl; for(inti=1;i<sizeof(str)-1;i+=2) cout<<str[i];safetysafetysftaey2.(3分)#include<iostream.h>voidmain(){ inta,b; intn=0; for(a=1,b=1;a<=100;a++){ if(b>=10)break; if(b%3==1){ b+=3; n++;4104103 } } cout<<a<<endl; cout<<b<<endl; cout<<n<<endl;}3. (3分)#include<iostream.h>classPixel{ intx,y;public: staticintcount; Pixel(){count++;} ~Pixel(){count--;}};intPixel::count=0;intmain(){ Pixelp[6]; Pixelp1=p[2]; cout<<Pixel::count<<endl; { Pixelp2[4]; cout<<Pixel::count<<endl; } cout<<Pixel::count<<endl;}661064.(3分)#include<iostream.h>classA{ inta1,a2;public: A(inti,intj){a1=i;a2=j;} voidprintA(){cout<<a1<<","<<a2<<endl;}};classB{ Aa; intb1;public: B(inti,intj,intk); voidprintB();};B::B(inti,intj,intk):a(k,j){b1=i;}voidB::printB(){ a.printA(); cout<<b1<<endl;}intmain(void){ Bbbb(8,2,6); bbb.printB();6,286,28}(6,3)[2,7,9](6,3)[2,7,9](6,3)[7,12,14]#include<iostream.h>classPixel{protected: intx,y;public: Pixel(inta,intb){x=a;y=b;} virtualvoidprint() {cout<<"("<<x<<","<<y<<")"<<endl;} virtualvoidmove(intd);};classPixel_3d:publicPixel{ intz;public: Pixel_3d(inta,intb,intc):Pixel(a,b){z=c;} voidprint() {cout<<"["<<x<<","<<y<<","<<z<<"]"<<endl;} voidmove(intd);};voidPixel::move(intd){x+=d;y+=d;}voidPixel_3d::move(intd){x+=d;y+=d;z+=d;}voidmain(){(6,3)(2,7)(6,3)(2,7)(6,3)(7,12) Pixel_3dd2(2,7,9); Pixel*ptr; ptr=&d1; ptr->print(); ptr=&d2; ptr->print(); ptr->move(5); ptr=&d1; ptr->print(); ptr=&d2; ptr->print();}6.去掉上题(即第5小题)程序中的“virtual”关键字,运行成果怎样?(4分)1.(3分)#include<iostream.h>voidmain(void){ charstring[]="successful"; char*p=string; cout<<string<<endl; cout<<*p<<*(p+2)<<*(p+4)<<*(p+6)<<endl;for(inti=1;i<sizeof(string);i+=2) cout<<string[i];successsuccessfulscesucsfl2.(4分)#include<iostream.h>intmain(){ intx,y; cout<<"Inputx,y:"; cin>>x>>y; cout<<"x="<<x<<’,’<<"y="<<y<<endl; cout<<"x-y="<<x-y<<"\n";cout<<”x*y=”<<x*y<<endl;return0; }//假定,输入如下两个数据:93↙x=9,y=3x-y=6x=9,y=3x-y=6x*y=273. (4分)#include<iostream.h>classPixel{ intx,y;public: staticintcount; Pixel(){count++;} ~Pixel(){count--;} Pixel(constPixel&obj) { x=obj.x;y=obj.y;count++; }};intPixel::count=0;intmain(){ Pixelp[5];cout<<Pixel::count<<endl; Pixelp1=p[1]; Pixelp2=p[2]; cout<<Pixel::count<<endl; { Pixelp2[3]; cout<<Pixel::count<<endl; } cout<<Pixel::count<<endl;5757107//第3题运行成果:4.(7分)#include<iostream.h>classA{ inta;protected: intprotect;public: A(intx){a=x;protect=x+5;cout<<"A"<<endl;} voidshow(){cout<<a<<""<<protect<<endl;}};classB{intb;public: B(intx){b=x;cout<<"B"<<endl;}intGetb(){returnb;}};classC:publicA{ intc; Bobj_b;public: C(intx,inty,intz);ABABC162,5};C::C(intx,inty,intz):A(x),obj_b(y){ c=z; cout<<"C"<<endl;}voidC::show(){ A::show(); cout<<obj_b.Getb()<<","<<c<<endl;}voidmain(void){ Cc1(1,2,5); c1.show();}//第4题运行成果:5. (6分)#include<iostream.h>classB {public: virtualvoidprint(){cout<<"B::print()\n";} };classD1:publicB {public: voidprint(){cout<<"D1::print()"<<endl;} };classD2:publicD1 {public: voidprint(){cout<<"D2::print()"<<endl;}};voidmain() { Bb0; D1d1; D2d2; B*p[3]={&b0,&d1,&d2}; for(inti=0;i<3;i++) p[i]->print(); B::print()D1::print()B::print()D1::print()D2::print()第5题的运行成果:B::print()B::print()B::print()B::print()B::print()B::print()第6题的运行成果:六.判断下面程序的主函数中语句①~⑩的对错。(10分)#include<iostream.h>classBase{ inta1; voidseta1(intx){a1=x;}public: inta2; voidseta2(intx){a2=x;}};classDerivedB:protectedBase{protected: intb1,b2; voidsetb1(intx){b1=x;}public: voidsetb2(intx){b2=x;}};classDerivedC:protectedDerivedB{ intc1; voidsetc1(intx){c1=x;}public: intc2; voidsetc2(inty){c2=y;} voidseta2(inty){Base::seta2(y);} voidsetb2(inty){b2=y;}};intmain(){ Baseobja; DerivedBobjb; DerivedCobjc; obja.seta1(9);//① objb.setb2(4);//② objc.setc2(8);//③ obja.a2=objb.b2+objc.c2;//④ objb.setb1(18); // ⑤ objb.setb2(objc.c2);//⑥ objc.Base::seta2(48);//⑦ objc.seta2(34); //⑧ objc.DerivedB::setb2(22);//⑨ objc.setb2(22); //⑩ return0;}//////////////答案如下:对√错×题①②③④⑤⑥⑦⑧⑨⑩答案×√√××√×√×√五、程序设计(第一题7分,第二题24分,合计31分)1.修改下面给出的程序,但不容许对main()函数在作任何修改,使程序可以在屏幕上输出:(7分)锄禾日当午,汗滴禾下土。谁知盘中餐,粒粒皆辛劳。本来的程序为:#include<iostream.h>voidmain(void){cout<<"汗滴禾下土。"<<endl;}答:修改后的程序如下:#include<iostream.h>classBase {public:Base() { cout<<"锄禾日当午,"<<endl; } ~Base() {cout<<"谁知盘中餐,"<<endl; cout<<"粒粒皆辛劳。"<<endl;}};Baseba;//不能改main就加个全局对象。voidmain(void){cout<<"汗滴禾下土。"<<endl;}2定义一种抽象类Shape,在此基础上派生出类Rectangel和Circle,两者均有计算对象面积的函数GetGetArea(),计算对象周长的函数GetPerim(),在主函数中定义一种Shape指针数组分别指向Rectangel和Circle的对象,并通过Shape类的指针数组实现对这两个对象的组员函数的调用,输出圆和矩形的面积和周长。(24分)#include<iostream>usingnamespacestd;classShape{public: Shape(floatx,floaty){X=x;Y=y;} virtualfloatGetArea()=0; virtualfloatGetPerim()=0;protected: floatX,Y;};classRectangel:publicShape{public: Rectangel(floatlen,floatwid):Shape(len,wid) { } virtualfloatGetArea() {cout<<"矩形面积是"<<endl; returnX*Y; } virtualfloatGetPerim() {cout<<"矩形周长是"<<endl; return2*(X+Y); }};classCircle:publicShape{public: Circle(floatr):Shape(r,r) { }virtualfloatGetArea() {cout<<"圆的面积是"<<endl; return3.14*X*Y; } virtualfloatGetPerim() {cout<<"圆的周长是"<<endl; return3.14*2*X; }};voidshow(Shape*s){ cout<<s->GetArea()<<endl; cout<<s->GetPerim()<<endl;}intmain(){ Rectangela(1,2); Circleb(3); Shape*q[2]={&a,&b}; for(inti=0;i<2;i++) { show(q[i]); } return0;}3.定义一种字符串类String,有两个私有数据组员:char*content和intlen;规定:1)在构造函数中提醒顾客输入字符串;2)顾客能提取和显示字符串;(分别由两个函数完毕)3)实现对字符串中所有小写字母变成大写,并显示。4)在主函数中定义String类象,并对的对所有组员函数进行测试。注意内存的分派与释放。(15分)#include<iostream.h>#include<string>#include<stdlib.h>classString{ char*content; intlen;public: String(); ~String(){delete[]content;} voiddisplay(); voidupper_str(); char*get_str()const{returncontent;}};String::String(){ charch[50]; cout<<"enterastring:\n"; cin>>ch; len=strlen(ch); content=newchar[len+1]; if(!content) { cout<<"Memoryallocationeror!"; exit(1); } strcpy(content,ch);}voidString::display(){ cout<<content<<"have"<<len<<"characters."<<endl;}voidString::upper_str(){ for(inti=0;i<len;i++) if(content[i]>='a'&&content[i]<='z') content[i]=content[i]-'a'+'A';}intmain(void){ Strings1; s1.display(); s1.upper_str(); s1.display(); cout<<s1.get_str()<<endl; return0;}4.请编写程序申明一种基类Employee,从它派生出类Technician,在主函数中将一种动态分派的Technician的对象地址赋值给一种Employee的指针,然后通过指针释放对象空间。可以不申明数据组员,但要申明合适的析构函数释放内存。(7分)#include<iostream>usingnamespacestd;classEmployee{public: Employee() { cout<<"Employeeconstruct"<<endl; } ~Employee() { cout<<"Employeedestruct"<<endl; }};classTechnician:publicEmployee{public: Technician() { cout<<"Technicianconstruct"<<endl; } ~Technician() { cout<<"Technicaindesctruct"<<endl; }};intmain(){ Employee*p=newTechnician; deletep; return0;}游泳池过道5.一圆型游泳池如图所示,目前需在其周围建一圆型过道,并在其四面围上栅栏。栅栏价格为20元/米,过道造价为15元/平方米。过道宽度为4米游泳池过道#include<iostream>usingnamespacestd;constfloatPI=3.14159f;constfloatFencePrice=20;constfloatConcretePrice=15;//申明类Circle及其数据和措施classCircle{private:floatradius;public:Circle(floatr);//构造函数floatCircumference()const;//圆周长floatArea()const;//圆面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安检员工服务规范
- 2024年监理工程师备考心得试题及答案
- 班级合作项目的有效模式计划
- 美术教师课堂管理技巧分享计划
- 建立学习型组织的步骤与总结计划
- 保险行业安全风险防控指南计划
- 多元文化教育实施计划
- 2024年特许另类投资考试优化复习试题及答案
- 利用大数据优化财务决策计划
- 适应行业变化的灵活策略计划
- 《少先队员采茶歌》课件
- 新外研版高一英语必修二unit6课文
- 气排球比赛积分表
- 20道瑞幸咖啡营运经理岗位常见面试问题含HR常问问题考察点及参考回答
- 教师调课申请表
- 急性心力衰竭中国急诊管理指南2022
- 《利用导数研究函数的零点问题》教学设计
- 茶室设计-课件
- 安全生产重大事故隐患排查报告表
- 管道系统吹洗(扫)记录(压缩空气)
- 建设单位甲方对监理单位考核管理办法
评论
0/150
提交评论