




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(1)类的默认的无参构造函数 。 A) 在任何情况下都存在 B) 仅当未定义无参构造函数时存在 C) 仅当未定义有参构造函数时存在 D) 仅当未定义任何构造函数时存在 (2) 类的默认的拷贝构造函数 。 A) 在任何情况下都存在 B) 仅当未定义拷贝构造函数时存在 C) 仅当未定义有参构造函数时存在 D) 仅当未定义任何构造函数时存在 改错题:每题有一处错误,请在出错语句后用注释说明出错原因并提出更改意见 (1)class Location int X , Y ; protected: int SetZero(int zeroX, int zeroY); private: int length, height; public: void Location(int initX, int initY); int GetX( ); int GetY( ); ; (2)下面 的程序有一处语法错误: #include class Pair int X, Y; public: Pair (int initX, int initY): X(initX), Y(initY) int sumXY()return X+Y; ; ; void main() Pair A1(5,3); coutA1.X+A1.Y; 题 1.分析以下程序执行的结果#include#includeclass Sample public: int x,y; Sample()x=y=0; Sample(int a,int b)x=a;y=b; void disp() coutx=x,y=yendl; ;void main() Sample s1(2,3); s1.disp();解:本题说明了重载构造函数的定义方法。首先定义了一个类Sample,在main()中定义了它的一个对象,定义s1对象时调用其重载构造函数(x=2,y=3),然后,调用其成员函数输出数据成员。所以输出为:x=2,y=3。注意:构造函数是唯一不能被显式调用的成员函数,它在定义类的对象时自动调用,也称为隐式调用。 -题 2.分析以下程序的执行结果#includeclass Sample int x,y; public: Sample()x=y=0; Sample(int a,int b)x=a;y=b; Sample() if(x=y) coutx=yendl; else coutx!=yendl; void disp() coutx=x,y=yendl; ;void main() Sample s1(2,3); s1.disp();解:本题说明了析构函数的定义方法。首先定义了一个类Sample,在main()中定义了它的一个对象,定义s1对象时调用其重载构造函数(x=2,y=3),然后,调用其成员函数输出数据成员,最后在退出程序时自动调用析构函数。所以输出为: x=2,y=3 x!=y注意:析构函数在对象的作用域结束时被自动隐式调用。-题 3.分析以下程序的输出结果#includeclass Sample int x; public: Sample(int a) x=a; coutconstructing object:x=xendl; ;void func(int n) static Sample obj(n);void main() func(1); func(10);解:本题说明静态对象构造函数的调用情况,由于在func()函数中定义的对象obj是静态对象,故只被构造一次,所以输出为: counstructing object:x=1注意:静态对象和静态变量一样,只被构造一次。块作用域的静态变量,在首次进入到定义该静态对象的函数时,构造该静态对象,以后进入该函数时不再构造静态对象。-题 1.4 分析以下程序的执行结果#includeclass Sample int x,y; public: Sample()x=y=0; Sample(int a,int b)x=a;y=b; void disp() coutx=x,y=ydisp();解:本题说明了对象指针的使用方法。这里通过指向对象的指针来调用对象的成员函数。对象指针p指向对象s,p-disp()等价于s.disp()。所以输出为: x=2,y=3.题 1.5 分析以下程序的执行结果#includeclass Sample public: int x; int y; void disp() coutx=x,y=yendl; ;void main() int Sample:*pc; Sample s; pc=&Sample:x; s.*pc=10; pc=&Sample:y; s.*pc=20; s.disp();解:本题说明了类数据成员指针的使用方法。在main()中定义的pc是一个指向Sample类数据成员的指针。执行pc=&Sample:x时,pc指向数据成员x,语句s.*pc=10等价于s.x=10(为了保证该语句正确执行,Sample类中的x必须是公共成员);执行pc=&Sample:y时,pc指向数据成员y,语句s.*pc=20等价于s.y=20(同样,Sample类中的y必须是公共成员)。所以输出为: x=10,y=20。 -题 1.6 下面是一个类的测试程序,设计出能使用如下测试程序的类。void main() Test a; a.init(68,55); a.print();其执行结果为: 测试结果:68-55=13解:本题是要设计Test类,其设计方法很多,这里给出一种解法。Test类包含两个私有数据成员x、y,以及两个公共成员函数init()和print(),前者用于给数据成员赋值,后者用于x,y的减法运算和输出相应的结果。#includeclass Test int x,y; public: void init(int,int); void print();void Test:init(int i,int j) x=i;y=j;void Test:print() cout测试结果:x-y=x-yendl;注意:类是一个外壳,它包含了类实例化时数据和代码的使用方法,它是一种模板,只有在定义类的对象时,才为对象分配空间,而不会为类分配空间。-1:下列有关类的说法不正确的是( )。A A 对象是类的一个实例B B 任何一个对象只能属于一个具体的类C C 一个类只能有一个对象D D 类与对象的关系和数据类型与变量的关系相似2:下面( )项是对构造函数和析构函数的正确定义。Avoid X:X(), void X:X()BX:X(参数), X:X()CX:X(参数), X:X(参数)Dvoid X:X(参数), void X:X(参数)3:( )的功能是对象进行初始化。 A析构函数 B. 数据成员 C.构造函数 D.静态成员函数4:下列表达方式正确的是( )。Aclass P B class Ppublic: public:int x=15; int x; void show()coutx; void show()coutx; ; C class P D. class P int f; public: ; int a; f=25; void Seta (int x) a=x;5: 拷贝构造函数具有的下列特点中,( )是错误的。A 如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的B 拷贝构造函数只有一个参数,并且是该类对象的引用C 拷贝构造函数是一种成员函数D 拷贝构造函数的名字不能用类名6:关于静态成员的描述中,( )是错误的。A 静态成员可分为静态数据成员和静态成员函数B 静态数据成员定义后必须在类体内进行初始化C 静态数据成员初始化不使用其构造函数D 静态数据成员函数中不能直接引用非静态成员7:设有如下程序结构:class Box ;void main()Box A,B,C; 该程序运行时调用 (1) 次构造函数;调用 (2) 次析构函数。8:设A为test类的对象且赋有初值,则语句test B(A); 表示 。例题11:分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。#includeclass one int a1,a2; public:one(int x1=0, x2=0);void main()one data(2,3); coutdata.a1endl; coutdata.a2endl;分析:出错原因:构造函数参数表语法错;构造函数没有函数体;类的对象不能直接访问类的私有成员变量。改正后的程序如下: #include class one int a1, a2; public: one(int x1=0, int x2=0) a1=x1;a2=x2; int geta1() return a1; int geta2() return a2; ;void main()one data(2,3); coutdata.geta1()endl; coutdata.geta2()endl;例题12:分析以下程序的错误原因,给出修改方案使之能正确运行。#include class Amplifier float invol,outvol;public: Amplifier(float vin,float vout) invol=vin;outvol=vout; float gain(); Amplifier:float gain() return outvol/invol; void main() Amplifier amp(5.0,10.0); coutgain()endl;分析:成员函数在类体外定义格式是:函数返回类型 类名:成员函数名(参数表);成员函数调用格式是:对象名.成员函数名(参数表)。改正后的程序如下:#include class Amplifier float invol,outvol;public: Amplifier(float vin,float vout) invol=vin;outvol=vout; float gain(); float Amplifier:gain() return outvol/invol; void main() Amplifier amp(5.0,10.0); coutamp.gain()endl;例题14:定义一个学生类,其中有3个数据成员:学号、姓名、年龄,以及若干成员函数。同时编写main函数使用这个类,实现对学生数据的赋值和输出。程序代码如下:#include#includeclass student int no; char name10; int age;public: student(int i, char *str, int g) no=i;strcpy(name,str);age=g;student( )no=0; strcpy(name,”none”);age=-1;void display()if (no0) cout”no” no”:”name” is ”age” years old.n”; else cout”no”no”: None!n”;void main() student d1(1001,”Tom”,18);d1.display();student d2;d2.display();例题15:计算两点之间的距离。 方法一:可以定义点类(Point),再定义一个类(Distance)描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现。#include#includeclass Point public: Point(int a=0, int b=0) x=a; y=b; int xcord() return x; int ycord () return y; private: int x,y;class Distance public: Distance(Point q1,Point q2); double getdist() return dist; private: Point p1,p2; double dist;Distance:Distance(Point q1,Point q2):p1(q1),p2(q2) double x=double(p1.xcord()-p2.xcord(); double y=double(p1.ycord()-p2.ycord(); dist=sqrt(x*x+y*y);void main() Point p(0,0),q(1,1);Distance dis(p,q);cout”The distance is: ”dis.getdist()endl;1 选择题(1)对类的构造函数和析构函数描述正确的是()。A. A. 构造函数可以重载,析构函数不能重载B. B. 构造函数不能重载,析构函数可以重载C. C. 构造函数可以重载,析构函数也可以重载D. D. 构造函数不能重载,析构函数也不能重载(2)类的析构函数的作用是( D )。A.一般成员函数 B.类的初始化 C.对象初始化 D.删除对象(3)假设OneClass为一个类,则该类的拷贝初始化构造函数的声明语句为( )。A.OneClass(OneClass p); B. OneClass& (OneClass p);C. OneClass(OneClass & p); D. OneClass (OneClass *p);(5)对于类中定义的成员,其默认的访问权限为( )。A.public B. protected C.private D. static (6)为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为( )。 A.public B. protected C.private D. static(7)下面对静态数据成员的描述中,正确的是( )。A.静态数据成员可以在类体内进行初始化B.静态数据成员不可以在类体内进行初始化C.静态数据成员不能受private控制符的作用D.静态数据成员可以直接用类名调用(8)下面对静态数据成员的描述中,正确的是( )。A.静态数据成员是类的所有对象共享的数据B.类的每一个对象都有自己的静态数据成员C.类的不同对象有不同的静态数据成员值D.静态数据成员不能通过类的对象调用2 2 写出下列程序的运行结果。(1)#include class Point int x,y; public: Point()x=1;y=1; Point()coutPoint x,y is deleted.endl; ;void main()Point a;运行结果为:Point 1,1 is deleted.(3)#include class Csample int i; public:Csample( );void Display( );Csample();Csample:Csample( ) cout”Constructor”,”;i=0; void Csample:Display() cout”i=”i”,”;Csample:Csample( ) cout”Destructor”endl;void main( ) Csample a;a.Display( );运行结果为:Constructor,i=0,Destructor(4) #include #include class Csample int i; public: Csample() cout constructor1 endl; Csample(int val) cout Constructor2endl;i=val; void Display()couti=iendl; Csample()coutDestructorendl;getch(); ;void main()Csample a,b(10); a.Display();b.Display();运行结果为:Constructor1Constructor2i=-858993460i=10DestructorDestructor(5)#includeclass Csampleprivate: int i; static int k; public: Csample( ); void Display( );int Csample:k=0;Csample:Csample( ) i=0; k+; void Csample:Display( ) cout”i=”i”,k=”kendl;void main( ) Csample a,b;a.Display( );b.Display( );运行结果为:i=0,k=2i=0,k=23按要求编写程序。(1)编写一个程序,设计一个产品类Product,其定义如下: class Product char *name; /产品名称int price; /产品单价int quantity; /剩余产品数量public:product(char *n,int p int q); /构造函数 product( ); /析构函数 void buy(int money); /购买产品 void get() const; /显示剩余产品数量 ;并用数据进行测试。(2)计算两点之间的距离。 提示:可以定义点类(Point),再定义一个类(Distance)描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现。参照本章例15(3)定义盒子Box类,要求具有以下成员:可设置盒子形状;可计算盒子体积;可计算盒子的表面积。#includeclass Box int x,y,z; int v,s;public:void init(int x1=0,int y1=0,int z1=0) x=x1;y=y1;z=z1; void volue() v=x*y*z; void area() s=2*(x*y+x*z+y*z); void show() coutx= x y= y z=zendl; couts= s v= vendl; ;void main() Box a;a.init(2,3,4);a.volue();a.area();a.show();(4)定义计数器类Counter。要求具有以下成员:计数器值;可进行增值和减值记数;可提供记数值。#includeclass Counter int n; public: Counter(int i=0) n=i; void init_Counter(int m) n=m; void in_Counter() n+; void de_Counter() n-; int get_Counter() return n; void show() coutnendl;void main() Counter a; a.in_Counter(); a.show(); a.init_Counter(10); a.show(); a.de_Counter(); couta.get_Counter()endl;(5)编写一个程序计算两个给定的长方形的周长和面积。#includeclass rectangle int len,wid; public:rectangle(int i=0,int j=0) len=i;wid=j; friend int area(rectangle temp) int s=temp.len*temp.wid; return s; friend fun(rectangle temp) int p=2*(temp.len+temp.wid); return p;void main() rectangle a(10,20); cout长方形的周长和面积为:area(a)tfun(a)endl; rectangle b(100,200); cout长方形的周长和面积为:area(b)tfun(b)endl;(6)编写一个程序,采用一个类求n!,并输出10!的值。 #includeclass fac int p; public: fac() p=1;fac( int j)p=1; if(j=0) for(int i=1 ;i=j;i+)p=p*i; else cout数据错误n;void show() cout 阶乘为:pendl;void main() int n; coutn; fac a(n); coutn; a.show();(7)编写一个程序,设计一个Cdate类,它应该满足下面的条件:1)用这样的格式输出日期:日-月-年;2)输出在当前日期上加两天后的日期;3)设置日期。#includeclass Cdate int year,month,day; int y1,m1,d1;public: void setdate(int y,int m,int d)year=y;month=m;day=d;void show()cout当前日期: day-month-yearendl; cout两天后日期:d1-m1-y1endl; void datetwo() /加一天后的年月日 d1=day;y1=year;m1=month; for(int i=0;i2;i+) d1+; switch(d1) case 29:if(!(month=2 &(year%400=0|year%4=0&year%100!=0) m1=3;d1=1;break; case 30:if(month=2 &(year%400=0|year%4=0&year%100!=0) m1=3;d1=1;break; case 31:if(month=4|month=6|month=9|month=11) m1=m1+1;d1=1;break; case 32: m1=m1+1;d1=1;if(month=12)y1=y1+1;m1=1;break; ;void main() Cdate d; int y,m,d1;coutymd1; d.setdate(y,m,d1);/加一天 d.setdate(y,m,d1);/再加一天 d.datetwo(); d.show();补充习题1选择题(1) 下列有关类的说法不正确的是 。A.类是一种用户自定义的数据类型B.只有类中的成员函数或类的友元函数才能存取类中的私有数据C.在类中(用class定义),如果不作特别说明,所有的数据均为私有数据D.在类中(用class定义),如果不作特别说明,所有的成员函数均为公有数据(2) 以下有关析构函数的叙述不正确的是( )A. 在一个类只能定义一个析构函数 B. 析构函数和构造函数一样可以有形参C. 析构函数不允许用返回值 D. 析构函数名前必须冠有符号“”(3) 以下有关类与结构体的叙述不正确的是( )A. 结构体中只包含数据;类中封装了数据和操作 B. 结构体的成员对外界通常是开放的;类的成员可以被隐藏C. 用struct不能声明一个类型名;而class可以声明一个类名D. 结构体成员默认为public;类成员默认为private(4) 以下叙述中不正确的是( )A. 一个类的所有对象都有各自的数据成员,它们共享函数成员B. 一个类中可以有多个同名的成员函数C. 一个类中可以有多个构造函数、多个析构函数D. 在一个类中可以声明另一个类的对象作为它的数据成员(5) 以下不属于构造函数特征的是( )A. 构造函数名与类名相同 B. 构造函数可以重载C. 构造函数可以设置默认参数 D. 构造函数必须指定函数类型(6) 以下有关类和对象的叙述不正确的是( )A. 任何一个对象都归属于一个具体的类B. 类与对象的关系和数据类型与变量的关系相似C. 类的数据成员不允许是另一个类的对象D. 一个类可以被实例化成多个对象(7) 设有定义:class person int num; char name10;public: void init(int n, char *m); .;person std30;则以下叙述不正确的是( )A. std是一个含有个元素的对象数组B. std数组中的每一个元素都是person类的对象C. std数组中的每一个元素都有自己的私有变量num和nameD. std数组中的每一个元素都有各自的成员函数init(8) 设有以下类的定义:class Ex int x; public:void setx(int t=0);若在类外定义成员函数setx(),以下定义形式中正确的是( )A. void setx(int t) . B. void Ex:setx(int t) . C. Ex:void setx(int t) . D. void Ex:setx() . (9) 以下关于静态成员变量的叙述不正确的是( )A静态成员变量为类的所有对象所公有B静态成员变量可以在类内任何位置上声明C静态成员变量的赋初值必须放在类外D定义静态成员变量时必须赋初值(10) 定义静态成员函数的主要目的是( )A方便调用 B有利于数据隐藏C处理类的静态成员变量 D便于继承(11) 以下叙述不正确的是( ) 使用静态数据成员:A可以节省内存空间 B是为了解决数据共享问题C可以直接用类名来引用 D可以提高序运算速度2.填空题(1) OOP技术由 、 、方法、消息和继承五个基本的概念所组成。(2) (2) 类的成员函数可以在 定义,也可以在 定义。(3) (3) 类test的析构函数名是 。(4) (4) 类是用户定义的类型,具有类类型的变量称作_。(5) (5) 一个类的析构函数不允许有 。(6) (6) 建立对象时,为节省内存,系统只给_分配内存。(7) (7) 用于定义C+的类的关键字有_、_和union。(8) (8) 类test的构造函数是和_同名的函数,析构函数是_。(9) (9) 类中的数据和成员函数默认访问类型为 。(10) (10)当建立一个新对象时,程序自动调用_。 3. 改错题(1) 下面的程序定义了一个Point类,找出程序中的错误语句并改正。 #include class Point int x;public: void Point(int a) x=a; int Getx()return x; void Show() coutGetx()endl; ; void main() Point A(76); coutA.Show(); (2) 根据静态成员的特点,指出下列程序的错误。#include#includeclass part public: Part(char *pname=”no name”) strncpy(name,pname); noofpart+; no=noofpart; cout”create the no: ”noofpart”of part”endl; Part() noofpart-; cout”destroy the no: ”noofpart”of part”endl; static int number() return no; protected: static int noofpart=0; int no; char name40;void main() Part p1; Part p2;(3) 以下程序的功能是:利用友员函数为类的成员变量进行初始化,然后利用成员函数输出。请改正程序中的错误,使之能正确运行。#includeclass A int a,b; public: friend void setval(int i,int j); void showA() couta,bendl; ;void setval(int i,int j)a=i; b=j;void main()A obj1; setval(2,3); obj1.showA();4. 看程序写结果(1) #includeclass test public: test(); test(int); test(); void display();protected: int n;test:test() cout”Constructing normallyn”;test:test(int num)n=num;cout”Constructing with a number: ”nendl;void test:display() cout”Display a number: ”nendl;test:test()cout”Destructing”endl; void main() test obj1; test obj2(59); obj1.display(); obj2.display();(2) #include class Count public: Cou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第21课 清朝前期的文学艺术说课稿-2023-2024学年初中历史中国历史 第二册统编版(五四学制)
- 人教版高中 必修二教学设计1.3 人口的合理容量
- 2025供电合同范本(律师)
- 2025中小学食堂承包合同样本
- 8.3 俄罗斯(说课稿)2023-2024学年七年级地理下册同步教学(湘教版河北专版)
- Unit 5 Fun Clubs Section A 1a~1d 说课稿 2024-2025学年人教版(2024)七年级英语上册
- 山西公务员真题试卷
- 5.1.1 合成高分子的基本方法- 加聚反应(教学设计)高二化学同步高效课堂(人教版2019选择性必修3)
- 机械厂员工奖励申请执行规章
- 印刷厂员工生日补贴管理规定
- 《保密意识培训》课件
- 2025年“物业管理及公共服务”等知识考试题库附完整答案【历年真题】
- 新时代大学生劳动教育 课件 第1章 劳动和劳动形态
- 生鲜店加盟合同模板
- 电影刮痧课件教学课件
- 游戏厅转让合同范本样本
- DB34∕T 4253-2022 公路水运工程质量监督规程
- 人教版数学四年级上册第二单元习题
- 预包装食品标签审核表
- 《中国诗词大会》必背经典古诗词100首
- 第5课《用发展的观点看问题》第1框《世界是永恒发展的》-【中职专用】《哲学与人生》同步课堂课件
评论
0/150
提交评论