第四章作业
一、 选择题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
{ 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< public: static int total; TT() { total*=4; } ~TT() { total/=2 ; } }; int TT::total=2; int main() { cout< cout< cout< cout< 程序输出结果为: 2,8,128,128,64 Press any key to continue main()中的语句cout< 由于total为静态数据成员,且每调用一次构造函数就要被乘以4。主函数中TT *p=new TT;语句里调用了一次构造函数,因此total被乘以4,即2*4=8. 2、写出下面程序的输出结果,并分析main()中的语句cout< 出结果是什么?为什么? #include 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 char c; public: PP(char cc='U'){c=cc;}