面向对象习题.docx
- 文档编号:257821
- 上传时间:2022-10-07
- 格式:DOCX
- 页数:68
- 大小:193.70KB
面向对象习题.docx
《面向对象习题.docx》由会员分享,可在线阅读,更多相关《面向对象习题.docx(68页珍藏版)》请在冰豆网上搜索。
面向对象习题
类与对象
例题1
:
下列有关类的说法不正确的是()。
A
.A.
对象是类的一个实例
B.
B.
任何一个对象只能属于一个具体的类
C.
C.
一个类只能有一个对象
D
.D.
类与对象的关系和数据类型与变量的关系相似
答案:
C
分析:
对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。
例题2:
下面(
)项是对构造函数和析构函数的正确定义。
A.
voidX:
:
X(),
voidX:
:
~X()
B.
X:
:
X(参数),
X:
:
~X()
C.
X:
:
X(参数),
X:
:
~X(参数)
D.
voidX:
:
X(参数),voidX:
:
~X(参数)
答案:
B
分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。
例题3:
()的功能是对象进行初始化
例题4:
下列表达方式正确的是(
)。
A.classP{B
.classP{
public:
public
:
intx=15;
intx
;
voidshow(){cout< ;} voidshow(){cout< ;} }; } C.classP{D. classP{ intf;public : }; inta ; f=25; voidSeta(intx){a=x;} 答案: D 分析: 当一个对象定义时,个对象的生命周期结束时, C++编译系统自动调用构造函数建立该对象并进行初始化;当一 C++编译系统自动调用析构函数注销该对象并进行善后工作; 分析: 在类体内不可对数据成员进行初始化(从类对象区别于其数据成员解释);类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。 例题5: 拷贝构造函数具有的下列特点中,( )是错误的。 A .A. 如果一个类中没有定义拷贝构造函数时, 系统将自动生成一个默认的 B. B. 拷贝构造函数只有一个参数,并且是该类对象的引用 C. C. 拷贝构造函数是一种成员函数 D .D. 拷贝构造函数的名字不能用类名 答案: D 分析: 如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。 例题6: 关于静态成员的描述中,()是错误的。 A.A.静态成员可分为静态数据成员和静态成员函数 B.B.静态数据成员定义后必须在类体内进行初始化 C.C.静态数据成员初始化不使用其构造函数 D.D.静态数据成员函数中不能直接引用非静态成员 答案: B 分析: 静态成员可分为静态数据成员和静态成员函数;静态数据成员被定义后,必须对它 进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。 例题7: 关于友元的描述中,()是错误的。 A. A. 友元函数是成员函数,它被说明在类体内 B. B. 友元函数可直接访问类中的私有成员 C. C. 友元函数破坏封装性,使用时尽量少用 D. D. 友元类中的所有成员函数都是友元函数 答案: A 分析: 友元函数是非成员函数,在类体内说明了,在类体外定义,定义和调用等同于一般的普通函数;由于它可以直接访问类的私有成员,因此破坏了类的封装性和隐藏性,尽量少用。 例题8设有如下程序结构: classBox {…}; voidmain() {BoxA,B,C;} 该程序运行时调用⑴次构造函数;调用⑵次析构函数。 答案: (1)3 (2)3 分析: 每创建一个对象自动调用一次构造函数,在这里创建了A、B、C三个对象,所以共 调用了三次构造函数;每释放一个对象,系统自动调用一次析构函数,A、B、C对象释放 时,分别调用析构函数,所以析构函数共调用了三次。 例题9: 设A为test类的对象且赋有初值,则语句testB(A);表示。 答案: 将对象A复制给对象B。 分析: 执行testB(A);语句相当于调用了默认复制构造函数,将A对象的属性复制给B对象。 例题10: 利用“对象名•成员变量”形式访问的对象成员仅限于被声明为⑴的成员; 若要访问其他成员变量,需要通过⑵函数或⑶函数。 答案: ("public (2)成员函数(3)友元函数 分析: 类体内的数据成员可声明为公有的、私有的和保护的,公有的数据成员可利用“对象 名.成员变量”形式来进行访问;私有的数据成员能被类中的其他成员函数或友元函数所调用;保护的数据成员可以在类体中使用,也可以在派生类中使用,但不能在其他类外通过对 象使用。 例题11: 分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。 #include classone private: inta1,a2; public: one(intx1=0,x2=0); }; voidmain() {onedata(2,3); cout< }分析: 出错原因: 构造函数参数表语法错;构造函数没有函数体;的私有成员变量。 改正后的程序如下: #include {inta1,a2; public: one(intx1=0,intx2=0){a1=x1;a2=x2;} intgeta1(){returna1;} intgeta2(){returna2;} };voidmain(){onedata(2,3); cout< } 例题12: 分析以下程序的错误原因,给出修改方案使之能正确运行。 #include classAmplifier{floatinvol,outvol; public: Amplifier(floatvin,floatvout){invol=vin;outvol=vout;}floatgain(); }; Amplifier: : floatgain(){returnoutvol/invol;} voidmain() {Amplifieramp(5.0,10.0);cout<<"\n\nThegainis=>"< }分析: 成员函数在类体外定义格式是: 函数返回类型类名: : 函数调用格式是: 对象名.成员函数名(参数表)。 改正后的程序如下: #include classAmplifier {floatinvol,outvol; public: Amplifier(floatvin,floatvout){invol=vin;outvol=vout;}floatgain(); }; floatAmplifier: : gain(){returnoutvol/invol;}voidmain() {Amplifieramp(5.0,10.0);cout<<"\n\nThegainis=>"< 类的对象不能直接访问类 成员函数名(参数表);成员 } 例题13: 下列程序的运行结果是。 #include classpoint {intx,y; public: point(inta,intb) {x=a;y=b;cout<<"callingtheconstructorfunction."< } point(point&p); friendpointmove(pointq); ~point(){cout<<"callingthedestructorfunction.\n";}intgetx(){returnx;} intgety(){returny;} }; point: : point(point&p) {x=p.x;y=p.y; cout<<"callingthecopy_initializationconstructorfunction.'n"; }- pointmove(pointq){cout<<"OK! \n"; inti,j; i=q.x+10; j=q.y+20; pointr(i,j); returnr; } voidmain() {pointm(15,40),p(0,0); pointn(m);p=move(n);cout<<"p="< } 分析: 根据构造函数、拷贝构造函数和友元函数的特点,执行该程序后,输出结果是: callingtheconstructorfunction. callingtheconstructorfunction. callingthecopy_initializationconstructorfunction. callingthecopy_initializationconstructorfunction. OK callingtheconstructorfunction. callingthecopy_initializationconstructorfunction. callingthedestructorfunction. callingthedestructorfunction. callingthedestructorfunction. P=25,60 callingthedestructorfunction. callingthedestructorfunction.callingthedestructorfunction. 说明: (1)构造函数执行三次,分别初始化主函数中的对象m,p和move函数中的对象r。 (2)拷贝构造函数共执行了三次。 第一次,初始化对象n;第二次在调用函数move()时,实参n给形参q进行初始化;第三次是执行函数move的returnr;语句时,系统用r初始化一个匿名对象时使用了拷贝构造函数。 (3)析构函数执行了六次。 在退出函数move时释放对象r和q共调用二次;返回主函数后,匿名对象赋值给对象p后,释放匿名对象又调用一次析构函数;最后退出整个程序时释放对象m,n和p调用三次。 例题14: 定义一个学生类,其中有3个数据成员: 学号、姓名、年龄,以及若干成员函数。 同时编写main函数使用这个类,实现对学生数据的赋值和输出。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 习题