内容发布更新时间 : 2025/1/7 5:33:36星期一 下面是文章的全部内容请认真阅读。
第6章练习题
同步练习6.1
一、选择题
1.下列类的定义中正确的是()。
(A)class a{int x=0;int y=1;} (C)class c{intx;int y;} (A)所有类成员
(B)class b{int x=0;int y=1;}; (D)class d{intx;int y;};
(B)private或protected的类成员 (D)public或private的类成员
2.在类定义的外部,可以被访问的成员有()。 (C)public的类成员
3.下列关于类和对象的说法中,正确的是()。
(A)编译器为每个类和类的对象分配内存 (B)类的对象具有成员函数的副本 (C)类的成员函数由类来调用 (A)this指针必须显式说明 (C)成员函数拥有this指针 【解答】
D
C
D
C
二、程序练习
1.阅读程序,写出运行结果。
#include
void setx( int m ) { x = m; cout << x << endl; } void sety( int n ) { y = n; cout << y << endl; } int getx() { return x; } int gety() { return y; } private : int x, y; }; int A::f1() { return x + y; } int A::f2() { return x - y; } int main() { A a;
a.setx( 10 ); a.sety( 5 );
cout << a.getx() << '\\t' << a.gety() << endl; cout << a.f1() << '\\t' << a.f2() << endl;
(D)编译器为每个对象的数据成员分配内存 (B)定义一个类后,this指针就指向该类 (D)静态成员函数拥有this指针
4.关于this指针的说法正确的是()。
} 【解答】
同步练习6.2
一、选择题
1.下面对构造函数的不正确描述是()。 (A)用户定义的构造函数不是必须的 2.下面对析构函数的正确描述是()。 (A)系统在任何情况下都能正确析构对象 (C)析构函数没有参数,也没有返回值 3.构造函数是在()时被执行的。
(A)建立源程序文件 (B)创建对象 (A)void~Base
(B)~Base()
(B)用户必须定义类的析构函数 (D)析构函数可以设置默认参数
(D)程序编译时 (D)Base()
(B)构造函数可以重载
(C)构造函数可以有参数,也可以有返回值 (D)构造函数可以设置默认参数
(C)创建类
4.在下列函数原型中,可以作为类Base析构函数的是()。
(C)~Base()const
5.下面关于复制构造函数调用的时机,不正确的是()调用。 (A)访问对象时
(B)对象初始化时
(C)函数具有类类型传值参数时 (A)成员函数 (A)成员函数 【解答】
C
C
(D)函数返回类类型值时
(D)友元函数 (D)友元函数
6.说明一个类的对象时,系统自动调用()。
(B)构造函数 (B)构造函数 B
B
A
B
(C)析构函数 (C)析构函数 C
7.程序中撤销一个类对象时,系统自动调用()。
同步练习6.3
一、选择题
1.在下列选项中,()不是类的成员函数。 (A)构造函数
(B)析构函数
(C)友元函数
(D)复制构造函数
2.下面对友元的错误描述是()。 (A)关键字friend用于声明友元
(B)一个类中的成员函数可以是另一个类的友元 (C)友元函数访问对象的成员不受访问特性影响 (D)友元函数通过this指针访问对象成员
3.已知类A是类B的友元,类B是类C的友元,则下面选项描述正确的是()。 (A)类A一定是类C的友元 (B)类C一定是类A的友元
(C)类C的成员函数可以访问类B的对象的任何成员
(D)类A的成员函数可以访问类B的对象的任何成员 4.下述关于类的静态成员的特性中,描述错误的是()。 (A)说明静态数据成员时前边要加修饰符static (B)静态数据成员要在类体外定义
(C)引用静态数据成员时,要在静态数据成员前加<类名>和作用域运算符 (D)每个对象有自己的静态数据成员副本 5.若有以下说明,则对n的正确访问语句是()。
class Y { //…; public: staticint n; }; int Y::n; Y objY; (A)n=1;
(B)Y::n=1;
(C)objY::n=1;
6.若有以下类Z说明,则函数fStatic中访问数据a错误的是()。class Z { staticint a; public:
static void fStatic(Z&); };
int Z::a=0;Z objZ;
(A)void Z::fStatic() { objZ.a =1; } (B)void Z::fStatic() { a = 1; } (C)void Z::fStatic() { this->a = 0; } (D)void Z::fStatic() { Z::a = 0; }
7.若有以下类W说明,则函数fConst的正确定义是()。
class W { int a; public:
voidfConst(int&) const; };
(A)void W::fConst( int&k )const { k = a; } (B)void W::fConst( int&k )const { k = a++; } (C)void W::fConst( int&k )const { cin>> a; } (D)void W::fConst( int&k )const { a = k; }
8.若有以下类T说明,则函数fFriend的错误定义是( )。
class T { inti;
friend void fFriend( T&, int ); };
(A)void fFriend( T &objT, int k ) { objT.i = k; } (B)void fFriend( T &objT, int k ) { k = objT.i; } (C)void T::fFriend( T &objT, int k ) { k += objT.i; } (D)void fFriend( T &objT, int k ) { objT.i += k; } C
D
D
D
B
C
A
C
D)Y->n
【解答】(