欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    复习习题课.ppt

    • 资源ID:3130091       资源大小:1.52MB        全文页数:46页
    • 资源格式: PPT        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    复习习题课.ppt

    复习-习题课,阅读以下程序后填空,#include class CSample int i; public: CSample() cout “Constructor“ “,“; i=0; CSample() cout “Destructor“ endl; void Display() cout “i=“ i “,“; ; void main() CSample a; a.Display(); 其运行结果: , , 。,Constructor,i=0,Destructor,阅读以下程序后填空,#include class A int a; public: void seta(int x) a=x; void showa() cout a endl; ; class B int b; public: void setb(int x) b=x; void showb() cout b endl; ; class C:public A,public B int c; public: void setc(int x,int y,int z) c=z; seta(x); setb(y); void showc() cout c endl; ; void main() C c; c.seta(1); c.showa(); c.setc(1,2,3); c.showc(); 其运行结果: _, _,1 3,阅读以下程序后填空,#include static int dys=31,28,31,30,31,30,31,31,30,31,30,31; class date int m,d,y; public: date(int m,int d,int y) this-m=m; this-d=d; this-y=y; date() void disp() coutdysdt.m-1) day-=dysdt.m-1; if(+dt.m=13) dt.m=1; dt.y+; dt.d=day; return dt; ; void main() date d1(2,10,2001), d2=d1+45; d2.disp(); 其运行结果:,3/27/2001,阅读以下程序后填空,#include class A int a,b; public: A(int i,int j) a=i; b=j; void move(int x,int y) a+=x; b+=y; void show() cout“(“a“,“ b“)“endl; ; class B:private A int x,y; public: B(int i,int j,int k, int l):A(i,j) x=k; y=l; void show() coutx“,“yendl; void fun() move(3,5); void f1() A:show(); ; void main() A e(1,2); e.show(); B d(3,4,5,6); d.fun(); d.show(); d.f1(); 其运行结果:,(1,2) 5,6 (6,9),填空题,动态多态性是在程序运行时通过改变具有虚函数定义的基类 使其指向不同派生类 从而调用不同版本的 。 如果需要在派生类中访问基类的私有成员可以通过以下两种方法实现: (1)在基类中增加 将派生类需要访问的私有成员定义为 。 (2)将需要访问基类私有成员的派生类的 声明为基类的 。,选择题,不是面向对象系统所包含的要素。 A. 重载 B. 对象 C. 类 D. 继承,选择题,不是构造函数的特性。 构造函数的函数名与类名相同 构造函数可以重载 构造函数可以设置默认参数 构造函数必须指定类型说明,选择题,下列对重载函数的描述中, 是错误的。 重载函数中不允许使用默认参数 重载函数中编译是根据参数表进行选择的 不要使用重载函数来描述毫不相干的函数 构造函数重载将会给初始化带来多种方式,下列函数中, 不能重载。 A. 成员函数 B. 非成员函数 C. 析构函数 D. 构造函数,选择题,下列关于多继承二义性的描述中, 是错误。 一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性 解决二义性的最常用的方法是对成员名的限定法 基类和派生类中同时出现同名函数,也存在二义性问题 一个派生类是从两个基类派生来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性,选择题,下列关于动态联编的描述中, 是错误的。 动态联编是以虚函数为基础的 动态联编是在运行时确定所调用的函数代码的 动态联编调用函数操作是指向对象的指针或对象引用 动态联编是在编译时确定操作函数的,选择题,函数模板max的定义如下: template T max(T x,T y) return (xy) ? x:y; 对于已知变量:int i,j; char a,b; float f,e; 下面对该函数模板的调用中: 和 是错误的。 A. max(i,j); B. max(a,j); C. max(a,b); D. max(f,e); E. max(e,i);,选择题,面向对象系统的 是一种信息隐藏技术,目的在于将对象的使用者与设计者分开,使用者不必知道对象的行为实现的细节,而只需用设计者提供的 命令对象去做什么即可。 A. 多态性 B. 封装性 C. 继承性 D. 复用性 E. 接口 F. 属性 G. 状态,选择题,下列引用的定义中, 是错误的。,选择题,int i; int ,B. int i; int ,C. float i; float ,D. char d; char ,下列关于new运算符的描述中,是错误的。 它可以用来动态创建对象和对象数组 使用它创建的对象或对象数组,可以使用运算符delete删除 使用它创建对象时要调用构造函数 使用它创建对象数组时必须指定初始值,选择题,在C+程序中,对象之间的相互通信通过_? A.继承实现 B.调用成员函数实现 C.封装实现 D.函数重载实现,选择题,语句ofstream f(SALARY.DAT,ios:appios:binary);的功能是建立流对象f,试图打开文件SALARY.DAT并与之连接,并且_ A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件 B.若文件存在,将其置为空文件;若文件不存在,打开失败 C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件 D.若文件存在,打开失败;若文件不存在,建立一个新文件,选择题,在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是_ A.基类的对象可以赋给派生类的对象 B.派生类的对象可以初始化基类的引用 C.派生类的对象可以直接访问基类中的成员 D.派生类的对象的地址可以赋给指向基类的指针,选择题,可以用p.a的形式访问派生类对象p的基类成员a,其中a是_ A.私有继承的公有成员 B.公有继承的私有成员 C.公有继承的保护成员 D.公有继承的公有成员,选择题,下面说法正确的是_ A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方 B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方 C.类的内联函数必须在类体内定义 D.类的内联函数必须在类体外通过加关键字inline定义,选择题,友元关系不能_? A.继承 B.是类与类的关系 C.是一个类的成员函数与另一个类的关系 D.提高程序的运行效率,选择题,下列关于成员函数特征的描述中, 是错误的。 成员函数一定是内联函数 成员函数可以重载 成员函数可以设置参数的默认值 成员函数可以是静态的,选择题,下列对运算符重载的描述中, 是正确的。 运算符重载可以改变运算数的个数 运算符重载可以改变运算符的优先级 运算符重载可以改变运算符的结合性 运算符重载不可以改变语法结构,选择题,下列对派生类的描述中, 是错误的。 一个派生类可以作为另一个派生类的基类 派生类至少有一个基类 派生类的成员除了它自己的成员外,还包含了它的基类的成员 派生类中继承的基类成员的访问权限在派生类中保持不变,选择题,设置虚基类的目的是 。 简化程序 消除二义性 C. 提高运行效率 D. 减少目标代码,选择题,下列关于虚函数的描述中, 是正确的。 虚函数是一个static类型的成员函数 虚函数是一个非成员函数 基类中说明了虚函数后,派生类中与其对应的函数可不必说明为虚函数 派生类的虚函数与基类的虚函数具有不同的参数个数和类型,选择题,是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何最终派生类都必须定义自己的版本。 A. 虚析构函数 B. 虚构造函数 C. 纯虚函数 D. 静态成员函数,选择题,一个 允许用户为类定义一种模式,使得类中的某些数据成员和某些成员函数的 返回值能取任意类型。 A. 函数模板 B. 模板函数 C. 类模板 D. 模板类,选择题,在C+中,打开一个文件,就是将这个文件与一个 建立关联;关闭一个文件就是取消这种关联。 A. 类 B. 流 C. 对象 D. 结构,选择题,指出下面的程序代码中class z的构造函数是否正确,如果不正确,写出正确的代码。 class x int i; public: x(int I)i = I; / ; class y float f; public: y(float F)f = F; / ; class z int i; x objx; y objy; public: z(int i, float f, int I):x(i),y(f),int(I) ,z(int i, float f, int I):objx(i),objy(f)i=l;,z(int i, float f, int I):objx(i),objy(f),i(I),读程序写运行结果,#include class A public: A()cout“A:A() called.n“; A()cout“A:A() called.n“; ; class B:public A public: B(int i) cout“B:B() called.n“; buf=new chari; B() delete buf; cout“B:B() called.n“; private: char *buf; ; void fun(A *a) delete a; void main() A *a=new B(15); fun(a); ,A:A() called. B:B() called. A:A() called.,读程序写运行结果,#include class A public: A()cout“A:A() called.n“; virtual A()cout“A:A() called.n“; ; class B:public A public: B(int i) cout“B:B() called.n“; buf=new chari; virtual B() delete buf; cout“B:B() called.n“; private: char *buf; ; void fun(A *a) delete a; void main() A *a=new B(15); fun(a); ,A:A() called. B:B() called. B:B() called. A:A() called.,指出下面程序段中的错误,并说明出错原因,class A int a,b; public: A(int aa,int bb) a=aa;b=bb; ; A x(2,3),y(4);,指出下面程序段中的错误,并说明出错原因,template class Tany T x,y; public: Tany(T a,T b) x=a,y=b; T sum( ) return x+y; ; Tany (int) obj(10,100.0);,读程序写运行结果,#include“iostream.h“ class test private: int num; float fl; public: test(); int getint()return num; float getfloat()return fl; test(); ; test:test() cout “Initalizing default“ endl; num=0;fl=0.0; test:test() cout “Desdtructor is active“ endl; void main() test array2; cout array1.getint()“ “ array1.getfloat() endl; ,Initalizing default Initalizing default 0 0 Desdtructor is active Desdtructor is active,阅读下面矩形类CRactangle的定义,在使用该类的main()中的空白处填写正确的代码实现要求的输出结果。 #include class CRectangle double ledge,sedge; public: CRectangle() CRectangle(double a,double b) ledge=a; sedge=b; double Area() return ledge*sedge; void ShowPerimeter() cout“Perimeter=“(ledge+sedge)*2endl; CRectangle Perimeter2(CRectangle r2) CRectangle temp; temp.ledge=ledge+r2.ledge; temp.sedge=sedge+r2.sedge; return temp; ; void main() CRectangle A(3.5,2.5),B(4.2,3.8); 要求执行结果: A.Perimeter=12 B.Perimeter=16 (A+B).Perimeter=28,cout“A.“; A.ShowPerimeter(); cout“B.“; B.ShowPerimeter(); cout“(A+B).“; A.Perimeter2(B).ShowPerimeter();,面向对象程序设计中,类类型与其它数据类型之间的转换可以通过构造函数和类类型 转换函数实现。下面的程序的main()中有标号的各语句都使用了哪些类型转换?它们都是合法的吗? 注意:如果不合法,只要说明不合法即可;如果合法,用表达式说明使用了哪些转换 和转换过程,例如: X x = 1; x = X(1) class X int i; public: X(int); / ; class Y int j; public: Y(X); operator int()return j; / ; void main() X x = 1; / Y y = x; / int i = 2; int ret = i + 10; ret = y + 10; / ret = y + 10 * y; / ret = x + y + i; / ret = x * x + i; / , x = X(1); Yy = Y(x); ret = int(y) + 10 ret = int(y) + 10 * int(y) 不合法 不合法,阅读以下程序 #include class A int i1; protected: int j1 public: A() i1=10; j1=11 void f1(); ; class B:private A int i2; protected: int j2 public: B() i1=20; j1=21 void f2(); ; class C:private B int i3; protected: int j3 public: C() i1=30; j1=31 void f3(); ; 回答下列问题: 派生类B中成员函数f2()能否访问基类A中的成员:f1(),i1和j1吗? 派生类B的对象b能否访问基类A中的成员:f1(),i1和j1吗? 派生类C中成员函数f3()能否访问直接基类B中的成员:f2(),j2和i2吗?能否 访问间接基类A中的成员:f1(),j1和i1吗? 派生类C的对象c能否访问直接基类B中的成员:f2(),j2和i2吗?能否访问间 接基类A中的成员:f1(),j1和i1吗?, 可以访问f1()和j1,而不可访问i1。 不可以访问f1(),也不可以访问i1和j1。 可以访问直接基类中的f2()和j2,而不可访问间接基类中的f1()和j1,也不可访问i2和i1。 不可以访问直接基类和间接基类的所有成员。,判断下面程序的main(),是否正确?若有错误,在不修改类定义的前提下,如何给予纠正? class Base / 、public: virtual void show(); ; class Derived: public Base / public: void show(); ; main() Base obj1, *ptr1; Derived obj2, *ptr2; ptr1 = ,的main()中下面两行: ptr2 = 错误,纠正方法是将这两行删除。,判断下面程序的main(),是否正确?若有错误,在不修改类定义的前提下,如何给予纠正? class fruit / public: virtual void show() = 0; / ; class apple: public fruit / public: void show(); / ; main() fruit fru, *ptr; apple app; ptr = ,main()中第一行: fruit fru, *ptr; 错误,纠正方法是将该语句改为: fruit *ptr; 另外第5、6两行: ptr = 错误,纠正方法是将这两行删除。,在类Point和类Rect中定义了带有缺省参数的构造函数,其原型说明如下,请指出其中哪些构造函数的原型说明是错误的。 Point(int x = 0, int y = 0); Point(int x = 0, int y); Point(int x, int y = 0); Rect(int left, int top = 0,int right, int bottom = 0); Rect(int left = 0, int top = 0, int right, int bottom); Rect(int left, int top, int right = 0, int bottom = 0);, 指出语句的错误,写出正确的语句; 在标号处填写应添加的语句; 写出程序的运行结果。 #include #include class String static int total_length; int length; char *contents; public: String(char *s) length = strlen(s); contents = new charlength + 1; strcpy(contents, s); total_length += length; static void show(String , cout “The length of string: “ str.length endl; int String:total_length = 0; 程序运行结果: The length of string: 23 The total length of strings: 23 The length of string: 24 The total length of strings: 47 The length of string: 23 The total length of strings: 47,定义一个point类,其中包括两个整型的私有数据成员x,y; 再定义一个line类,其中包含两个point类的保护对象成员p1,p2,表示直线的两个端点,line类具有定义直线(line)、画线(draw)、清除线(erase)和移动线(move)的能力,其中move功能应能直接修改直线的两个端点。下面写出了这两个类的定义和它们的构造函数的定义。 请在定义的空白处,填写正确的代码。 _ class line protected: point p1,p2; public: line(int x1, int y1, int x2, int y2); line(point P1, point P2); void draw(); void erase(); void move(int dx, int dy); void move(point dp); ;,class point; friend void line:move(int dx, int dy); friend void line:move(point dp); p1(x1,y1),p2(x2,y2) p1(P1),p2(P2),class point int x,y; public: point(int X, int Y) x = X; y = Y; _ _ ; line:line(int x1, int y1, int x2, int y2): _ line:line(point P1, point P2): _ ,在下面的程序中带标号的空白处填写正确的标识符或表达式,以便满足main()中的调用需要。#include class Complex private: double real, imag; public: Complex(double r = 0, double i = 0); Complex operator+(const Complex ,const friend const Complex &c2 const c1.real - c2.real c1.imag c2.imag const,判断下列对类Shape的引用是否有错误,如果有错误,说明出错原因。 class Shape /. public: virtual void Show() = 0; virtual float Area() = 0; /. ; Shape figure; / Shape *ptr; / Shape fun(); / void graph(Shape fig); / Shape / , 抽象类不能创建对象; 正确 抽象类不能作为函数的返回类型; 抽象类不能作为函数的参数类型。 正确 正确,

    注意事项

    本文(复习习题课.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开