第四章作业参考答案 下载本文

第四章作业

一、 选择题C A 无答案 D B B B

1、关于静态成员函数,下列说法正确的是_C_。 A.能直接访问类的非静态成员

B.一定不能以任何方式访问类的非静态成员 C.一般专门用来访问类的静态数据成员 D.静态成员函数有this 指针

2、下面关于常数据成员的说法正确的是_A_。

A.常数据成员必须进行初始化,并且其值不能被更新

B.常数据成员的初始化可以在类内用形如const double PI=3.14 的方式进行 C.常数据成员的作用域不仅包括本类内部,还包括外部其他类 D.常数据成员可以不通过类构造函数的初始化列表进行初始化 3、关于常成员函数的描述不正确的是__。(无正确答案) A.常成员函数不可以改变类中的任何数据成员的值 B.常成员函数不可以调用普通成员函数

C.常成员函数是类的一种特殊函数,它并不是只用来访问常数据成员 D.常成员函数可以被所有对象调用

4、关于常对象的说法,不正确的是_D_ A.常对象只能调用常成员函数

B.常对象是指该对象的数据成员不可以被改变的对象 C.常对象所属的类中也能定义非常成员函数 D.常对象可以调用所有的成员函数

5、关于静态数据成员的描述,不正确的是_B_。 A.静态数据成员为同类所有对象所共有

B.初始化静态数据成员时可以不在该成员名字前加关键字static 修饰 C.静态成员函数不可以在类内部进行初始化

D.公有静态数据成员一定可以用“类名::静态数据成员名”的形式在程序中访问 6、下面的类声明中,为静态数据成员声明的行应当填入_B_。 class Test {

private:

__________ count; public:

void print();

//其他成员函数??.. }

Int Test::count=0;

A. int B.staticint C.staticint Test:: D .intTest::

7、下面程序进行编译时,标有数字的几行中哪些无法通过_B_ #include using namespace std; class Fun

{ int a;

staticint b; constint c; public: Fun()//① { a=0; b++; c=0;//② }

static intGetB()//③ {

returna; }

void change() {

b*=2; } };

int Fun::b=0;//④ int main() {

Fun t;

cout<

A.①②④ B.①②③ C.③④ D.①②③④ 二、问答题

1、为什么要定义静态数据成员?简述其声明和初始化的形式。

原因:为了解决同一个类的不同对象之间数据共享问题,同一个类所有的对象共享此成员,该成员只有一份拷贝。

静态数据成员的声明形式为: Static 类型名 静态数据成员名;

静态数据成员的初始化形式为(必须在类体外进行): 类型名 类名::静态数据成员名=数值;(默认值为0)

2、为解决数据共享与数据安全的统一,C++语言通过适时地巧用关键字const,对相应的数 据进行保护,const 主要有哪几种用法?它们分别有什么特征?

const主要有三种用法,分别为定义常数据成员,定义常成员函数,定义常对象。 特征:

1.常数据成员是类中的一种特殊成员,是仅作用于类范围内的常量。该成员在定义时前面要加const关键字,一定要作初始化,且其初始化工作只能通过在类构造函数的初始化列表中进行,在整个程序的运行过程中,其值不可以被改变。

2.常成员函数对类的数据成员只作访问性操作而不作修改性操作。关键字const可以作为与

其他成员函数重载的标志。常成员函数不可以调用普通成员函数,但是反过来,普通成员函数可以调用常成员函数。公用属性的常成员函数可以被类的任何对象调用,但是,类的常对象只能调用常成员函数。

3.常对象在定义时必须进行初始化,而且其对象的数据成员值不能修改。常对象只能调用它的常成员函数而不能调用普通的成员函数。常成员函数无论是进行原型声明还是再函数定义的首部,都不能省略const。 三、读程序写结果,回答问题。

1、写出下面程序的输出结果,并分析main()中的语句cout<total<<\的输出结果 是什么?为什么?#include using namespace std; class TT {

public:

static int total; TT() {

total*=4; }

~TT() {

total/=2 ; } };

int TT::total=2; int main() {

cout<

cout<total<<\TT A,B;

cout<

cout<

程序输出结果为: 2,8,128,128,64

Press any key to continue

main()中的语句cout<total<<\的输出结果为: 8, 原因:

由于total为静态数据成员,且每调用一次构造函数就要被乘以4。主函数中TT *p=new TT;语句里调用了一次构造函数,因此total被乘以4,即2*4=8.

2、写出下面程序的输出结果,并分析main()中的语句cout<

出结果是什么?为什么? #include using namespace std; class FF {

staticintnum; public:

FF(){num++;} ~FF(){num--;} staticintGetNum() { returnnum;} };

int FF::num=2; int main() {

cout<

cout<

cout<

运行结果为:

2,6,6,6,6,4,4,4第二个为 Press any key to continue

语句cout<

原因:静态变量num初始化的值为2,类FF共建立了4个对象,所以调用4次构造函数,每次加1,使得num的值加4,num的值变为6,当语句delete []p;使用时,释放了P[2]的两个对象,调用两次析构函数,每次减1,使num的值减2,变为4。再次用a[0].GetNum()输出时就会输出num的值为4.

3、写出程序的输出结果,并分析main 函数中语句p3.show();调用的是哪一个show()函数? 为什么?

#include using namespace std; class PP {

char c; public:

PP(char cc='U'){c=cc;}