思考题.docx
- 文档编号:18193939
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:59
- 大小:30.75KB
思考题.docx
《思考题.docx》由会员分享,可在线阅读,更多相关《思考题.docx(59页珍藏版)》请在冰点文库上搜索。
思考题
提示
思考题用于帮助同学复习。
所以做思考题时必须先进行思考,运用课堂上所学知识,求得答案。
必要时才上机操作进行验证。
这样才真有收获。
切勿先上机求取思考题结果而少动或不动脑子,收获将小得多。
第二章思考题
(一)判断下列各种描述是否正确,对者划√,错者划
(1)引用的运行机理和指针完全相同,而其使用却方便的多。
(2)引用的功能和指针相同,但却多一项,即从函数返回的引用可用作等式左值。
(3)引用是“别名其表,指针其实”。
也即,引用在使用时是一个别名,但实质上是一个指针。
(二)填空:
(1)被定义于所有函数之外的变量称为()变量,也称()变量。
(2)被定义于某个函数(程序块)之内的变量称为()变量,也称()变量。
(3)静态变量分为()静态变量和()静态变量两种。
(4)所有函数的代码通常都被存放在内存的()区。
全局变量和所有静态变量通常都被存放在内存的()区。
所有函数中的局部变量、函数参数、所用通用寄存器的值、返主地址等通常在该函数被调用时,被存放在内存的()区。
使用new所分配的空间被存放在内存的()区。
(三)给出以下程序的运行结果:
(1)//cal_val2.cpp
//callbyvalue
#include
voidinc(intv)
{
v++;
}
voidmain()
{
inti=10;
inc(i);
cout<
}
(2)//cal_ptr2.cpp
//callbypointer
#include
voidinc(int*v)
{
(*v)++;
}
voidmain()
{
inti=10;
inc(&i);
cout<
}
(3)//cal_ref2.cpp
//callbyreference
#include
voidinc(int&v)
{
++v;
}
voidmain()
{
inti=10;
inc(i);
cout<
}
(四)给出以下程序的运行结果,并画出程序中执行第一、第二、第三和第五语句后两个变量的内存存储内容:
#include
voidmain()
{
intval;//
(1)
int&refv=val;//
(2)
val=15;//(3)
cout<<"变量与引用的值:
"< refv=30;//(5) cout<<"重新赋值后变量与引用的值: "< } (五)给出以下程序的运行结果: //exer_ch3_10.cpp //Improvedversionofexample5.17onp.118ofLv'sbook #include statics(3);//orstaticints(3);"int"canbeomitted! intfun(void); voidmain() { cout<<"externalstatics(global)="< fun(); fun(); } intfun() { staticb(3);//"int"maybeomitted! b+=s; cout<<"staticbinfun="< returnb; } 第三章思考题 (一)选择填空: (1)关于类定义格式的描述中,()是错的: i.A.一般类的定义格式可分为类的说明(也称类的接口)部分和成员函数定义(也称类的实现)部分共两部分,有时这两部分也可合并为一个统一的类的定义部分。 B.一般类中包含有数据成员和成员函数。 C.类对象的内存存储内容中,非静态数据成员一般存于栈区内,而静态数据成员则存于数据区内。 D.成员函数都应是公有的,数据成员都应是私有的。 (2)下列关键字中,()不是类定义中使用的关键字: A.classB.publicC.switchD.private (3)关于类成员的描述中,()是错的: A.类中可以说明一个或多个成员函数。 B.类中的成员函数只能定义在类体外。 C.定义在类体外的成员函数前如果加上inline,它就是内联函数。 D.在类体外使用数据成员时,须使用类名及作用域运算符(: : )来指明(限定)该数据成员。 (4)在静态成员的描述中,()是错的: A.静态成员分为静态数据成员和静态成员函数。 B.静态数据成员声明后必须在类体内进行初始化。 C.静态数据成员初始化不使用其构造函数。 D.静态成员函数中的语句不能直接访问该类具体对象的非静态成员。 (5)在友元的描述中,()是错的: A.友元函数是成员函数。 B.友元函数可直接访问类中的私有成员。 C.友元函数破坏封装性,应尽量少用。 D.友元类中的所有成员函数都是友元函数。 (6)在有关类和对象的描述中,()是错的: A.对象是类的一个实例。 B.任何一个对象只能属于一个类。 C.一个类只能有一个对象。 D.类和对象的关系与数据类型和变量的关系相似。 (7)下列关于对象数组的描述中,()是错误的。 A.对象数组只能赋初值而不能再赋值。 B.对象数组的下标(序号)从0开始。 C.对象数组的每个元素都是相同类的对象。 D.对象数组的数组名是一个常量指针。 (8)下列关于子对象的描述中,()是错误的。 A.子对象是另一个类的一种数据成员。 B.子对象不可以是自身类的对象。 C.对子对象的初始化必须通过构造函数中的初始化列表。 D.一个类中只能含有一个子对象作其成员。 (9)在new运算符的下列描述中,()是错误的。 A.它可以动态地创建对象或对象数组。 B.用它创建对象数组时必须指定初始值。 C.构造函数可用它在堆区内创建对象或对象数组。 D.当构造函数使用它在堆区内创建对象或对象数组时,在程序结束前应使用运算符delete来释放所分配的堆区空间。 (10)在delete运算符的下列描述中,()是错误的。 A.用它可以释放用new运算符创建的对象和对象数组所分配的堆空间。 B.用它释放一个对象的堆空间时,它作用于一个new所返回的指针。 C.用它释放一个对象数组的堆空间时,它作用的指针名前须加下标运算符[]。 D.用它释放一个对象的堆空间时,它同时删除new所返回的指针。 (二)判断下列各种描述是否正确,对者划√,错者划 (1)一个类中可以只有公有成员,也可以只有私有成员,也可以公有、私有成员都有。 (2)用class定义的类中,缺省的访问权限是公有的。 (3)建立一个类的对象时,系统将其非静态数据成员存储于该对象的栈区存储空间内。 而该类的静态数据成员和成员函数则分别存储于其它不同的分区内。 (4)析构函数是一个函数体为空的成员函数。 (5)如果一个成员函数只访问一个类的静态数据成员,则可将该成员函数说明为静态成员函数。 (6)可在类的构造函数的初始化列表中对其静态数据成员进行初始化。 (7)一个类的友元类中的所有成员函数都可对该类中的私有成员进行存取操作。 (三)给出以下程序的运行结果: //exer_3_1.cpp //Lv'sbook,p.221 #include classC{ staticintc; public: C(){cout<<++c< staticintGetc() {returnc;} ~C(){cout< }; intC: : c; voidmain() { Cc1,c2,c3,c4,c5; cout< : Getc()< } (四)给出以下程序的运行结果: //exer_ch3_4.cpp #include classM { intm1,m2; public: M(){} M(inti,intj){m1=i;m2=j;} voidSum(Ma,Mb){ m1=a.m1+b.m1; m2=a.m2+b.m2; } voidprint() {cout<<"m1="< }; voidmain() { Ma(34,78); Mb(a); Mc; c.Sum(a,b); c.print(); } (五)判断下列描述是否正确,对者划√,错者划。 (1)对象和指向对象的指针都可以用作函数参数。 (2)对象数组的元素必须是同一个类的对象。 (3)一维对象指针数组的每个元素应该是同一个类的不同对象的地址值。 (4)运算符new可以创建变量或对象,也可以创建变量数组或对象数组。 (5)子对象的初始化可在复合类的构造函数内进行。 (六)给出以下程序的运行结果: //exer_ch3_7.cpp #include classB { intm; public: B(inti=0) {m=i;cout<<"Constructorcalled."< voidPrint()const {cout< ~B(){cout<<"Destructorcalled."< }; voidfun(constB&c) { c.Print(); } voidmain() { fun(10);//i.e.Bb(10); //fun(b); } (七)给出以下程序的运行结果 //exer_ch3_8.cpp #include classB { intb1,b2; public: B(inti,intj); voidprintB(); }; B: : B(inti,intj) { b1=i; b2=j; } voidB: : printB() { cout<<"b1="< } classA { inta; Bobj; public: A(inti,intj,intk); voidprintA(); }; A: : A(inti,intj,intk): obj(i,j),a(k) {} voidA: : printA() { obj.printB(); cout<<"a="< } voidmain() { Ax(12,65,100); x.printA(); } (八)给出以下程序的运行结果: //exer_ch3_9.cpp #include classM { staticintA; staticintB; public: M(inta){A=a;B+=a;} staticvoidfun(); }; voidM: : fun() { cout<<"A="< cout<<"B="< } intM: : A=3; intM: : B=6; voidmain() { MP(6); M: : fun(); MQ(8); Q.fun(); } (九)给出以下程序的运行结果: //Toshowdifferentstatusofauto,staticandexternaldata //staticandexternaldataareinitializedonlyonce //andexistallthetime #include voidstatic_f(void); voidauto_f(void); voidexternal_f(void); intg=9; voidmain() { auto_f(); auto_f(); static_f(); static_f(); external_f(); external_f(); } //functiontoreadandincrementanautodatum voidauto_f(void) { inti=3; i+=3; cout< } //functiontoreadandincrementastaticdatum voidstatic_f(void) { staticinti=6; i+=3; cout< } //functiontoreadandincrementanexternaldatum voidexternal_f(void) { g+=3; cout< } (十)填空: (1)一般程序有四个分区,它们是: ()、()、()和()。 (2)()用于存放主程序和各子程序(包括各类中的成员函数)代码 (3)()用于存放全局变量和数据 (4)()用于存放局部变量,函数参数,寄存器值等 (5)()用于为由new所创建的对象或其数组动态地分配存储空间 第四章思考题 (一)选择填空: (1)下列对派生类的描述中,()是错误的。 A.一个派生类可以用作另一个派生类的基类。 B.派生类至少应有一个基类。 C.基类中成员被派生类继承后其映射的访问权限并不改变。 D.派生类对象的单独内存存储内容中除了本类部分的所有非静态数据成员外,还首先包含了它的基类部分的所有非静态数据成员。 (2)主函数main可以访问派生类的对象中哪一类基类成员? () A.公有继承的基类部分的公有成员。 B.公有继承的基类部分的保护成员。 C.公有继承的基类部分的私有成员。 D.保护继承的基类部分的公有成员。 (3)多继承派生类建立对象时,()被最先调用。 A.派生类自己的构造函数。 B.虚基类的构造函数。 C.非虚的基类的构造函数。 D.派生类中子对象的构造函数。 (二)判断下列描述的正确性,对者划√,错者划 (1)C++语言中,允许单继承,也允许多继承。 (2)派生类不能再派生出新的类。 (3)在公有继承中,派生类对象的成员函数可以访问基类部分中的私有成员。 (4)在公有继承中,派生类对象的成员函数不可以访问基类部分中的保护成员。 (5)在私有继承中,派生类对象的成员函数不可以访问基类部分中的公有成员。 (6)在保护继承中,派生类对象的成员函数可以访问基类部分中的保护成员。 (三)画出以下题中的DAG和访问控制表 //exer_ch4_3.cpp //FromLv'sbook,p.304 #include classA { inta,b; public: A(inti,intj) {a=i;b=j;} voidMove(intx,inty) {a+=x;b+=y;} voidShow()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 思考题