C总复习.docx

上传人:b****9 文档编号:25220981 上传时间:2023-06-06 格式:DOCX 页数:23 大小:24.15KB
下载 相关 举报
C总复习.docx_第1页
第1页 / 共23页
C总复习.docx_第2页
第2页 / 共23页
C总复习.docx_第3页
第3页 / 共23页
C总复习.docx_第4页
第4页 / 共23页
C总复习.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

C总复习.docx

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

C总复习.docx

C总复习

C++总复习(2009年11月14日星期六)

第一章面向对象程序设计概述

(陈维兴,林小茶编著)清华大学出版社

一、概念

1.什么是面向对象程序设计(p2-3)

答:

面向对象的程序设计=对象+消息p2-3

面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。

这种方法的提出是对软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。

2.面向对象设计特点(p3)

答:

(1)程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递的规律;

(2)程序中的一切操作都是通过向对象发送消息来实现的,对象接收到消息后,启动有关方法完成相应的操作;

(3)类由继承关系产生相互间的联系。

3.什么是对象?

什么是类?

对象与类的关系是什么?

答:

对象:

是我们认识世界的基本单元。

它可以是人,也可以是物,可以是一件事情。

类:

是对一组具有共同属性特征和行为的对象的抽象。

类和对象之间的关系是抽象和具体的一个实例。

在面向对象程序设计中,“类”就是具有相同的数据和相同的操作的一组对象的集合。

也就是说,“类”就是具有相同的数据结构和相同的操作的一类对象的描述。

4.对象的特征

(1)封装性

(2)模块独立性

(3)动态连接性

(4)易维护性

5.什么是消息?

消息具有什么性质?

(P6)

6.什么是封装和抽象?

(p9)

所谓封装就是把某个事物包围起来,外界是看不到的,甚至是不可知的。

封装的好处是,把对象的内部实现和外部行为分隔开来。

抽象是对复杂世界的简单表示,抽象强调感兴趣的信息,忽略了不重要的信息。

7.什么是继承?

p11

8.什么是单继承、多继承?

p12-13

9.什么是多态性?

10.什么是函数重载和运算符重载?

为什么要使用重载?

p14-15

第二章C++概述

1、简述C++的主要特点p17

2、下面是一个C程序,改写它,使它采用C++风格的I/O语句。

#Include

cin>>//scanf

cout<

3、测试下面的注释(它在C++风格的单行注释中套入了类似于C的注释)是否有效(上机试)

4、以下这个简短的C++程序不可能编译通过,为什么?

没有函数调用声明。

C++要求为每一个函数进行声明,包括返回值为int的函数。

5、回答问题p30

(1)以下两个原形是否等价(等价)

floattfun(inta,floatb,char*c);

floattfun(int,float,char*c);

(2)以下两个函数的第一行是否等价

floattfun(inta,floatb,char*c)

floattfun(int,float,char*c)

不等价,函数的第一行必须要有参数名。

(3)以下两个函数原型是否等到价

floattfun();

floattfun(void);

等价,在C++中参数末注明,C++默认为空。

6、使用内置函数的优点是什么?

p26~28

7、下面语句中错误的是_________:

A.int*p=newint(10);

B.int*p=newint[10];

C.int*p=newint;

D.int*p=newint[40](0);

8、假设已经有定义”constchar*constname=”chen”;”,下面的语句中正确的是(p25)

A.name[3]=’a’;

B.name=”lin”;

C.name=newchar[5];

D.cout<

9、假设已经有定义”char*constname=”chen”;”,下面的语句中正确的是(p25)

A.name[3]=’q’;

B.name=”lin”;

C.name=newchar[5];

D.name=newchar[‘q’];

10、假设已经有定义”constchar*name=”chen”;”,下面的语句中错误的是(p25)

A.name[3]=’q’;

B.name=”lin”;

C.name=newchar[5];

D.name=newchar[‘q’];

11、下面的类型声明中正确的是:

(p38-40)

A.int&a[4];

B.int&*p;

C.int&&q;

D.inti,*p=&i;

12、写出下列程序的运行结果(p34)

#include

inti=15;

voidmain()

{

inti;

i=100;

:

:

i=i+1;

cout<<:

:

i<

}

13、写出下列程序的运行结果(a=10,b=10)

14、分析下程序的输出结果

#include

int&f(int&i)

{

i+=10;

returni;

}

voidmain()

{

intk=0;

int&m=f(k);

cout<

m=20;

cout<

}

第三章类和对象

1、类声明的一般格式(P51)

2、构造函数和析构函数的主要作用是什么?

它们各有什么特征?

(P61,62,67)

3、什么是对象数组:

(P74)

4、什么是this指针?

它的主要指针是什么?

(P80)

5、友元函数有什么作用?

(P90)

6、假设在程序中已经声明了类point,并建立了其对象p1和p4。

请回答以下几个语句有什么区别?

(1)pointp2,p3;

(2)pointp2=p1;

(3)pointp2(p1);

(4)p4=p1;

7、在下面有关对构造函数的描述中,正确的是

A.构造函数可以带有返回值

B.构造函数的名字与类名完全相同。

C.构造函数必须带有参数;

D.构造函数必须定义,不参默认。

8、在声明类时下面说法正确的是:

A.可以在类声明中给数据成员典型初值。

B.数据成员的数据类型可以是register;

C.private,public,protected可以按任意顺序出现;

D.没有用private,public,protected定义的数据成员是公有成员。

9、在下面有关析构函数特征的描述中,正确的是

A.一个类可以定义多个析构函数;

B.析构函数名与类名完全相同;

C.析构函数不能指定返回值;

D.析构函数可以有一个或多个参数。

10、构造函数是在_______时被执行的。

A.程序编译

B.创建对象;

C.创建类;

D.程序装入内存。

11、在下面有关静态成员函数的描述中,正确的是:

A.在静态成员函数中可以使用this指针;

B.在建立对象前,就可以为静态数据成员赋值;

C.静态成员函数在类外定义时,要用static前缀;

D.静态成员函数只能在类外定义。

12、在下面有关友元函数的描述中,正确的说法是:

A.友元函数是独立于当前类的外部函数。

B.一个友元函数不能同时定义为两个类的友元函数。

C.友元函数必须在类的外部定义。

D.在外部定义友元函数时,必须加关键字friend。

13、友元的作用之一是:

A.提高程序的运行效率;

B.加强类的封装性;

C.实现数据的隐藏性;

D.增加成员函数的种类。

23、建立类

#include

classcylinder{

doubler,h,v;

public:

cylinder(doublex,doubley)

{

r=x;h=y;

v=3.14*r*r*h;}

voidvol()

{

cout<<"圆柱体积="<

};

voidmain()

{

cylinderv1(1.0,1.0);

v1.vol();

}

24、

#include

classbook{

intqu,price;

public:

book(inta,intb)

{

qu=a;price=b;

cout<<"qu*price="<

};

voidmain()

{

booksu[5]={book(1,10),book(2,20),book(3,30),book(4,40),book(5,50)};

}

或:

#include

classbook{

intqu,price;

public:

book(inta,intb)

{

qu=a;price=b;}

voidshow(){

cout<<"qu*price="<

};

voidmain()

{

inti;

booksu[5]={book(1,10),book(2,20),book(3,30),book(4,40),book(5,50)};

for(i=0;i<5;i++)

su[i].show();

}

 

第四章派生类与继承

1、有哪几种继承方式?

每种方式的派生类对基类成员的继承性如何?

(P114)

2、派生类能否直接访问基类的么有成员?

若否,应该如何实现?

(P119)

3、保护成员有哪些特性?

保护成员以公方式或私有方式被继承后的访问特性如何?

(P112)

4、派生类构造函数和析构函数的执行顺序是怎样的?

(P124)

5、派生类构造函数和析构函数的构造规则是怎样的?

(124)

6、什么是继承?

多继承时,构造函数和析构函数执行顺序是怎样的?

(P136)

7、在类的派生中为何要引入虚基类?

虚基类构造函数的调用顺序是如何规定的?

(142)

8、使用派生类的主要原因是:

A.提高代码的可重用性。

B.提高程序的运行效率。

C.加强类的封装性。

D.实现数据的隐藏。

9、假设已经定义好了一个类student,现在要定义类derived它是从student私有派生的,定义类derived的正确写法是:

A.“classderived:

:

studentprivate{//...};

B.classderived:

:

studentpublic{//...};

C.classderived:

privatestudent{//...};

D.classderived:

publicstudent{//...};

10、下面的程序可以输出ASCII字符与所对应的数字的对照表,修改下列程序,使其可以输出字母a到z。

#include

#include

classtable{

public:

table(intp)

{i=p;}

voidascii(void);

protected:

inti;

};

voidtable:

:

ascii(void)

{

intk=1;

for(;i<127;i++)

{

cout<

if((k)%12==0)

cout<<"\n";

k++;

}

cout<<"\n";

}

classder_table:

publictable{

public:

der_table(intp,char*m):

table(p){c=m;}

voidprint(void);

protected:

char*c;

};

voidder_table:

:

print()

{

cout<

table:

:

ascii();

}

voidmain()

{

der_tableob1(32,"ASCIIvalue--char");

ob1.print();

der_tableob2('a',"ASCIIvalue--char");

ob2.print();

}

输出a到z程序:

修改上面的构造函数,在基类中有两个数据成员,用于输出时的起始值和终止值。

在派生类的构造函数中要进行基类构造函数赋值,因此,也要修改参数列表,由原来的一个改为2个。

#include

#include

classtable{

public:

table(inta,intb)

{x=a;y=b;}

voidascii(void);

protected:

intx,y;

};

voidtable:

:

ascii(void)

{

intk=1,i;

for(i=x;i<=y;i++)

{

cout<

if((k)%12==0)

cout<<"\n";

k++;

}

cout<<"\n";

}

classder_table:

publictable{

public:

der_table(inta,intb,char*m):

table(a,b){c=m;}

voidprint(void);

protected:

char*c;

};

voidder_table:

:

print()

{

cout<

table:

:

ascii();

}

voidmain()

{

der_tableob1('a','z',"ASCIIvalue--char");

ob1.print();

}

第五章多态性

1、什么是静态联编?

什么是动态联编?

(P162)

2、编译时的多态性与运行时的多态性有什么区别?

它们的实现方法有什么不同?

(P162)

3、简述运算符重载的规则。

(P167)

4、友元运算符函数和成员运算符函数有什么不同?

(P180,182)

5、什么是虚函数?

虚函数与函数重载有哪些相同点与不同点?

(P200,P206)

6、什么是纯虚函数?

什么是抽象类?

(P211,212)

7、有关运算符重载正确的描述是:

A.C++语言允许在重载运算符时改变运算符的操作个数;

B.C++语言允许在重载运算符时改变运算符的优先级;

C.C++语言允许在重载运算符时改变运算符的结合性;

D.C++语言允许在重载运算符时改变运算符原来的功能;

8、能用友元函数重载的运算符是:

A.+

B.=

C.[]

D.->

9、关于虚函数,正确的描述是:

A.构造函数不能是虚函数;

B.析构函数不能是虚函数;

C.虚函数可以是友元函数;

D.虚函数可以是静态成员函数;

10、要实现动态联编,派生类中的虚函数:

A.返回的类型可以与虚函数的原型不同;

B.参数个数可以与虚函数的原型不同;

C.参数类型可以与虚函数的原型不同;

D.以上都不对。

11、如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是:

A.virtualshow()=0;

B.virtualvoidshow();

C.virtualvoidshow()=0;

D.voidshow()=0virtual;

12、下面的程序段中虚函数被重新定义的方法正确吗?

为什么?

(P206)

第六章模板

1、为什么要使用模板?

函数模板声明的一般形式是什么样?

(P222)

2、什么是模板形参和模板函数?

(P223)

3、为什么使用类模板、类模板和模板类之间的关系是什么?

(P228)

4、函数模板与同名的非模板函数重载时,调用的顺序是怎样的?

(P228)

5、假设定义了函数模板

template

Tmax(Tx,Ty)

{return(x>y)?

x:

y;}

并定义了inti;charc;

错误的调用语句是:

A.max(i,i);

B.max(c,c);

C.max((int)c,i);

D.max(i,c);

6、模板的使用是为了:

A.提高代码的可重用性

B.提高代码的运行效率;

C.加强类的封装性;

D.实现多态性。

第七章C++的I/O流类库函数

1、C++为什么要有自己的输入输出系统?

2、C++有哪四个预定义的流,它们分别与什么具体设备相关联?

3、cerr和clog之间的区别是什么?

4、C++提供了哪两种控控制输入输出格式的方法?

5、C++进行文件输入输出的基本过程是什么?

6、顺序文件与随机文件有什么区别?

7、选择下列程序的运行结果

#include

#include

voidmain()

{

inti=7890;

cout<

cout<

}

A.7890正确:

7890

78907890

B.7890

7890

C.7890

7890

D.以上都不对

8、选择下例程序的运行结果。

#include

#include

voidmain()

{

inti=100;

cout.setf(ios:

:

hex);

cout<

cout<

cout.setf(ios:

:

dec);

cout<

}

以上程序运行结果是:

A.6410064

B.646464

C.6464100

D.64100100

9、使用myfile.open(“Sales.dat”,ios:

:

app);语句打开文件Sales.dat后则:

A.该文件只能用于输出;

B.该文件只能用于输入;

C.该文件既可以用于输出,也可以用于输入;

D.若该文件存在,则清除该文件的内容。

第二章程序题

1.将下面的C程序改写为采用C++风格的I/O语句。

习题2

#include

#include

main()

{floata,b,c,disc,x1,x2,p,q;

scanf(“a=%f,b=%f,c=%f”,&a,&b,&c);//cin>>a>>b>>c;

disc=b*b-4*a*c;

p=(-b)/(2*a);

q=sqrt(disc)/(2*a);

x1=p+q;x2=p-q;

printf(“\n\nx1=%5.2f\nx2=%5.2f\n”,x1,x2);} //cout<

#include

#include

voidmain()

{intm,i,k;

printf(“pleaseenteraintegernumber:

”);

scanf(“%d”,&m);/*输入一个整数m*/

k=(int)sqrt(m);/*对m求平方根,再取整*/

for(i=2;i<=k;i++)/*i作为除数*/

/*如果m被i整除,m肯定不是素数*/

if(m%i==0)break;

if(i>k)printf("%disaprimenumber.\n",m);

elseprintf("%disnotaprimenumber.\n",m);

}

 

main()

{inta,b,c;

scanf("%d,%d",&a,&b);

 c=max(a,b);

 printf("Maxis%d",c);

max(intx,inty)/定义有参函数max/

 intz;

 z=x>y?

x∶y;

 return(z);

2.使用C++用函数调用实现两个数的求和。

习题4

3.有两个同名变量s,一个是全局变量,一个是局部变量,要求在程序中为它们赋值,全局变量s=10,局部变量的s=20。

并输出各自的值。

习题12。

第三章

1.建立类point,在成员函数(setxy)中为x,y赋值,用成员函数getx(),gety()分别读取x,y的值。

在主函数中定义对象op1,对象中的值为x=1,y=5。

输出对象x,y的值。

(参考例3,p57)

2.建立类point,在构造函数中为x,y赋值,用成员函数getx(),gety()分别读取x,y的值。

在主函数中定义对象op1,对象中的值为x=10,y=5。

输出对象x,y的值。

3.建立类point,在构造函数中为x,y赋值,用成员函数getx(),gety()分别读取x,y的值。

在主函数中定义对象op1,对象中的值为x=10,y=5。

输出对象x,y的值。

要求函数原型在类外定义。

4.建立类myclass,在构造函数中为a,b赋值,用成员函数show()显示a,b的值,并定义析构函数。

在主函数中定义对象op1,对象中的值为x=10,y=5。

输出对象x,y的值。

要求函数原型在类外定义。

5.建立类myclass,在set()函数中为a,b赋值,用成员函数show()显示a,b的值。

在主函数中定义对象op1,对象中的值为x=10,y=5。

输出对象x,y的值。

(p59,例4)

6.建立类myclass,在set()函数中为a,b赋值,用成员函数show()显示a,b的值。

在主函数中定义对象op1,对象中的值为x=10,y=5。

输出对象x,y的值。

要求函数原型在类外定义。

(p59,例4)

7.建立类exclass,在set_a()函数中为x赋值,用成员函数show_a()显示x的值。

在主函数中定义exclass类对象op1和指针对象p,p指向op1,对象中的值为x=10。

用对象指针输出对象x的值。

(p78,例15)

8.建立类stu,在类中定义私有静态数据成员snum,snum=10。

定义成员函数show()显示snum的值。

在主函数中定义对象op1,通过调用show()输出snum的值(p85,例22)。

9.建立类stu,在类中定义公有静态数据成员num,num=10。

在主函数中定义对象op1,并用对象访问静态成员的形式输出num的值(p86,例24)。

10.建立类man,在类中定义私有数据成员name,age。

用构造函数初始化数据。

用友元函数disp显示数据。

在主函数中定义对象stu1,输出对象的值(p90,例25)。

11.建立类worker,在类中定义私有数据成员name,age。

用构造函数初始化数据。

用友元函数show显示数据。

在主函数中定义对象stu1,输出对象的值(p90,例25)。

第四章

1.建立一个base基类,在类中定义私有数据成员x为整型。

用构造函数初始化数据。

用成员函数disp输出x数据。

在base的基础上定义一个派生类ps,在类中定义私有数据成员y为整型,用构造函数初始化数据,并声明访问

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

当前位置:首页 > 初中教育 > 学科竞赛

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

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