C总复习.docx
- 文档编号:25220981
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:23
- 大小:24.15KB
C总复习.docx
《C总复习.docx》由会员分享,可在线阅读,更多相关《C总复习.docx(23页珍藏版)》请在冰豆网上搜索。
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</printf
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为整型,用构造函数初始化数据,并声明访问
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 总复习 复习