c++复习.docx

上传人:b****6 文档编号:6176899 上传时间:2023-01-04 格式:DOCX 页数:28 大小:24.83KB
下载 相关 举报
c++复习.docx_第1页
第1页 / 共28页
c++复习.docx_第2页
第2页 / 共28页
c++复习.docx_第3页
第3页 / 共28页
c++复习.docx_第4页
第4页 / 共28页
c++复习.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

c++复习.docx

《c++复习.docx》由会员分享,可在线阅读,更多相关《c++复习.docx(28页珍藏版)》请在冰豆网上搜索。

c++复习.docx

c++复习

1、#include

usingnamespacestd;

classMyClass{

public:

MyClass(inti=0)

{cout<<1;}

MyClass(constMyClass&x)

{cout<<2;}

MyClass&operator=(constMyClass&x)

{cout<<3;return*this;}

~MyClass(){cout<<4;}

};

intmain(){

MyClassobj1

(1),obj2

(2),obj3(obj1);

return0;

}问输出结果:

112444

2、#include

#include

usingnamespacestd;

classMyString{

public:

charstr[80];

MyString(constchar*s){strcpy(str,s);}

MyString&operator+=(MyStringa){

strcat(str,a.str);

return*this;}

};

ostream&operator<<(ostream&s,constMyString&z)

{returns<

intmain(){

MyStringx("abc"),y("cde");

cout<<(x+=y)<

return0;}问输出结果:

abccde

3、有类定义如下:

#include"iostream.h"

classType{

public:

Type(inti=0);

Typeoperator-(int);

friendTypeoperator+(Type,Type);

private:

intval;};

若有对象定义Typecl;则下列语句序列中,错误的是c

A)Type(3)+c1;B)c1+Type(3);C)3-c1;D)c1-3;

4、#include

usingnamespacestd;

classBook{

public:

Book(char*t=""){strcpy(title,t)};

----virtual_char*Category()const=0;-----

private:

chartitle[40];

};

classNovel:

publicBook{

public:

Novel(char*t=""):

Book(t){}

char*Category()const

{return"文学";}

};

intmain(){

Book*pb;

pb=newNovel();

cout<Category();

return0;

5.有如下程序:

#include

usingnamespacestd;

classMedia{

public:

voidName();

voidShow();

protected:

intpage;

};

classBook:

privateMedia{

public:

voidPrint()

{cout<

voidShow()

{Media:

:

Show();}//①

};

intmain(){

BookBible;

Bible.Name();//②

Bible.Print();//③

Bible.Show();//④

return0;

}编译不正确的是:

(2)

6、有如下程序段

inti=0,j=1;

int&r=i;//①

r=j;//②

int*p=&i;//③

*p=&r;//④//将*去掉或者将&去掉

其中编译正确的语句是123

7、下面程序的语句1-4有误,找出不正确的语句并修改

有如下程序:

#include

usingnamespacestd;

classMyClass{

public:

MyClass(intx):

val(x){}

voidSet(intx){val=x;}

voidPrint()const

{cout<<"val="<

private:

intval;

};

Intmain(){

constMyClassobj1(10);---

MyClassobj2(20);

obj1.Print();//语句1

obj2.Print();//语句2

obj1.Set(20);//语句3//将此句删除obj1为常量

obj2.Set(30);//语句4

return0;

8、有如下程序:

#include

usingnamespacestd;

classToy{

public:

Toy(char*_n)

{strcpy(name,_n);count++;}

~Toy(){count--;}

char*GetName(){returnname;}

staticintgetCount(){returncount;}静态成员属于类

private:

charname[10];

staticintcount;};

intToy:

:

count=0;

intmain(){

Toyt1("Snoopy"),t2("Mickey"),t3("Barbie");

cout<

getcount();

return0;}//输出3

9、如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员,有如下程序,没有使用多态机制。

#include

usingnamespacestd;

classBase{

inta,b;

public:

Base(intx,inty){a=x;b=y;}

voidshow(){cout<

};

classDerived:

publicBase{

intc,d;

public:

Derived(intx,inty,intz,intm):

Base(x,y){c=z;d=m;}

voidshow(){cout<

};

intmain(){

BaseB1(50,50),*pb;

DerivedD1(10,20,30,40);

pb=&D1;

pb->show();

return0;//输出1020

10.若有如下类声明

#include"iostream.h"

classMyClass{

public:

MyClass(){cout<<1;}

};执行下列语句

MyClassa,b[2],*p[2];以后,程序的输出结果111

11、下列语句中不正确的是(AC)。

A)constinta;B)constinta=10;

C)constint*point=10;D)constint*point=newint(10);

12、在C++中既可以用于文件输入又可以用于文件输出的流类是A

A)fstreamB)ifstreamC)ofstreamD)iostream

13、有如下程序:

#include

usingnamespacestd;

classA{

public:

A(){cout<<'A';}

~A(){cout<<'C';}

};

classB:

publicA{

public:

B(){cout<<'G';}

~B(){cout<<'T';}

};

intmain(){

Bobj;

return0;

}运行这个程序的输出结果是AGTC

14、有如下程序:

#include

usingnamespacestd;

classBoat;

classCar{

public:

Car(inti):

weight(i){}

friendintTotal(constCar&c,constBoat&b);//①

private:

intweight;

};

classBoat{

public:

Boat(inti):

weight(i){}

friendintTotal(constCar&c,constBoat&b);

private:

intweight;

};

intTotal(constCar&c,constBoat&b){//②

returnc.weight+b.weight;

}

intmain(){

Carc(10);

Boatb(8);

cout<<"Thetotalweightis"<

return0;

}

15.若需要为XV类重载乘法运算符,运算结果为XV类型,在将其声明为类的成员函数时,下列原型声明正确的是D

A)XVoperator*(XV,XV);B)XV*(XV);

C)operator*(XV);D)XVoperator*(XV);

16.有如下程序:

#include

  usingnamespacestd;

  classInstrument{

  public:

  virtualvoidDisplay()=0;

  };

  classPiano:

publicInstrument{

  public:

  voidDisplay(){/*函数体程序略*/}

  };

  intmain(){

Instruments;

  Instrument*p=0;

  //...;

  return0;}下列叙述中正确的是B

  A)语句“Insturment*p=0;”编译时出错

  B)语句“Instruments;”编译时出错

  C)类Piano中的Display函数不是虚函数

  D)类Instrumen类是一个虚基类

17、已知类IMS中两个成员函数的声明为"voidlisten()const;"与"voidspeak();",另有两个对象的定义为"IMSobj1;"与"constIMSobj2;",则下列语句中,产生编译错误的是B

A)obj1.listen();B)obj1.speak();

C)obj2.listen();D)obj2.speak();

17、若在表达式y/x中,“/”是作为成员函数重载的运算符,则该表达式还可以表示为C

A)x.Operator/(y)  B)operator/(x,y)  

C)y.operator/(x)  D)operator/(y,x)

18、有函数模板声明和一些变量定义如下:

  templateT1sum(T2,T3);

  doubled1,d2;

  则下列调用中,错误的是D

  A)sum

  B)sum(d1,d2);

  C)sum(d1,d2);

  D)sum(d1,d2);//没有参数指明T1的类型

19、有如下类定义

classA{

char*a;

public:

A():

a(0){}

A(char*aa){//把aa所指字符串拷贝到a所指向的存储空间

a=_newchar[strlen(aa)+1];__________________;

strcpy(a,aa);

}

~A(){delete[]a;}

};横线处应填写的表达式是

20、有如下程序:

#include

usingnamespacestd;

classtest{

private:

inta;

public:

test(){cout<<"constructor"<

test(inta){cout<

test(consttest&_test){

a=_test.a;

cout<<"copyconstructor"<

}

~test(){cout<<"destructor"<

};

intmain(){

testA(3);

return0;

}运行时输出的结果是3destructor

21、下列运算符重载函数中,属于类Value的成员函数的是(ACD)。

A)Valueoperator+(Value);

B)Valueoperator-(Value,Value);

C)Valueoperator*(int);

D)Valueoperator/(Value);

22、下列函数模板的定义中,不合法的是CD

A)templateTabs(Tx){returnx<0?

-x:

x;}

B)templateTabs(Tx){returnx<0?

-x:

x;}

C)templateTabs(Tx){returnx<0?

-x:

x;}

D)templateTabs(Tx){returmx<0?

-x:

x;}

23、有如下程序:

#include

usingnamespacestd;

classpoint{

public:

staticintnumber;

public:

point(){number++;}

~point(){number--;}

};

intpoint:

:

number=0;

voidmain(){

point*ptr;

pointA,B;

{

point*ptr_point=newpoint[3];

ptr=ptr_point;

}

pointC;

cout<

:

number<

delete[]ptr;

}运行时输出的结果是6

24、下列函数原型声明中,正确的是ABD

  A)intfnction(intm,intn);

  B)intfunction(int,int);

  C)intfunction(intm=3,intn);

  D)intfunction(int&m,int&n);

25、若有函数模板mySwap和一些变量定义如下:

template

voidmySwap(TX,TY);

doubled1,d2;inti1,i2;

下列对mySwap的调用中,正确的是ABD

A)mySwap(i1,i2)B)mySwap(d1,d2)

C)mySwap(i1,d1)D)mySwap(i2,d2)

26、下列程序的输出是3,请填充程序中的空缺,使该行形成一个运算符重载函数的定义。

#include

usingnamespacestd;

classMyNumber{

intn;

public:

MyNumber(intk):

n(k){}

----operator----int()const{returnn;}

};

intmain(){

MyNumbernum1(3);

cout<

return0;

}

27、有如下程序:

//没有错误

#include

#include

usingstd:

:

cout;

classPoint{

public:

frienddoubledistance(constPoint&p);//p距原点的距离

Point(intxx=0,intyy=0):

x(xx),Y(yy){}//①改为point(intxx,intyy):

x(XX),y(YY)

private:

intx,Y;

};

doubledistance(constPoint&p){//②

returnsqrt(p.x*p.x+p.Y*p.Y);

}

intmain(){

Pointp1(3,4);

cout<

return0;

}

28、若已定义了类Vehicle,则下列派生类定义中,正确的是acd

  A)classCar:

Vehicle{/*类体略*/},

  B)classCar:

publicCar{/*类体略*/};

  C)classCar:

publicVehicle{/*类体略*/};

D)classCar:

virtualpublicVehicle{/*类体略*/};

29、使用VC6打开工程test4_1,此工程包含一个源程序文件test4_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:

Constructor2

Constructor1

i=0

i=10

Destructor

源程序文件test4_1.cpp清单如下:

#include<iostream.h>

classCSample{

inti;

public;

CSample(){cout<<"Constructorl"<<endl;i=0;}

CSample(intval){cout<<"Constructor2"<<endl;i=val;}

~CSample(){cout<<"Destructor"<<endl;}

voiddisp();

};

/**********found

(1)********/

voiddisp(){//voidCSample:

:

disp()声明错了

cout<<"i=”<<i<<endl;

}

voidmain(){

CSample*a,b(10);

/**********found

(2)*********/指向不明CSamplec;a=&c;a->disp();

a->disp();

/**********found(3)*********/

b->disp();普通对象b.disp();

}

30、请将下列模板类Data补充完整。

template

classData

{

public:

voidput(Tv)

{val=v;}

_T__get()//返回数据成员val的值,返回类型不加转换

{returnval;}

private:

Tval;

};

31、根据程序中的注释将下列缺失部分补充完整。

#include"iostream.h"

classPoint{

intx,y;//点的x和y坐标

public:

Point(intxx=0,intyy=0):

x(xx),y(yy){}

};

classCircle{

Pointcenter;//圆心位置

Intradius;//半径

public:

//利用cx和cy分别初始化圆心的x和y坐标

----Circle(intcx,intcy,intr):

center(cx,cy)-----,radius(r){}

voidarea(){cout<<3.14159*radius*radius<

};

32、下列程序的输出结果是__`___042_____________。

#include

usingnamespacestd;

classTest{

public:

Test(){cnt++;}

~Test(){cnt--;}

staticintCount(){returncnt;}

private:

staticintcnt;

};

intTest:

:

cnt=0;

intmain(){

cout<

:

Count()<<'';

Testtl,t2;

Test*pT3=newTest;

Test*pT4=newTest;

cout<

:

Count()<<'';

deletepT4;

deletepT3;

cout<

:

Count()<

return0;

}

33、使用VC6打开工程test4_2。

此工程包含一个源程序文件test4_2.cpp,其对一个学校的教师和考生情况进行了描述。

由于教师和考生之间有相同的信息,如姓名、年龄等,所以可抽象出一个基类person,考生类student和教师类teacher作为person类的派生类。

请按要求完成下列操作,将程序中的类定义补充完整。

(1)定义基类person的私有数据成员name和age,分别用于表示姓名和年龄,name为字符指针,age为血型的数据。

请在注释“//**1**”之后添加适当的语句。

(2分)

(2)完成基类person的重载构造函数person(char*n,inta)的定义,把数据成员name,age分别初始化为参数n,a的值,请在注释“//**2**”之后添加适当的语句。

(2分)

(3)根据主函数main中对s1的声明,定义派生类student的构造函数。

在注释“//**3**”之后添加适当的语句。

(3分)

(4)完成派生类teacher成员函数voidsetinf(ehar*n,inta,char*d,char*1)的定义,其功能为记录教师的姓名、年龄、院,系与职称信息。

请在注释“//**4**”之后添加适当的语句。

(2分)

输出结果如下:

刘雷(45)destructor蒋军(23)destructor

#include<iostream.h>

#include

classperson{

//*********************1*******************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1