c++课后习题解答6-10 下载本文

第6章 ;类和对象(一)

练习题6

6.1 判断题

× 1.使用class定义的类,其默认的访问权限是公有的,使用struct定义的类,其默认的访问权限是私有的。

× 2.类中的成员函数都是公有的,数据成员都是私有的。

× 3.定义在类体内的成员函数是内联函数,定义在类体外的成员函数不能是内联函数。 √ 4.类定义后,它的成员个数及名称就不会再被改变了。

× 5.定义或说明对象时,系统会自动调用构造函数为创建的对象初始化。如果类中没有定义任何构造函数时,就无法给定义的对象初始化。

√ 6.定义一个对象时,系统只为该对象的数据成员开辟内存空间,而成员函数是同类对象共享的。

√ 7.对象成员的表示方法与结构变量成员的表示方法相同。

√ 8.创建对象时系统自动调用相应的构造函数为对象初始化,没有相应的构造函数时,系统会自动生成。

√ 9.构造函数是一个其名与类名相同的特殊的成员函数。 × 10.析构函数是一个函数体为空的成员函数。

√ 11.构造函数和析构函数都是系统自动调用的成员函数。 × 12.构造函数和析构函数都可以重载。

√ 13.成员函数与一般函数一样可以重载、内联和设置参数的默认值。 × 14.静态成员是指静态对象的成员。

× 15.静态数据成员必须在构造函数的成员初始化列表中进行初始化。 √ 16.静态成员都可以使用类名加作用域运算符的方法来引用。

× 17.静态成员函数中引用静态数据成员和非静态数据成员的方式是相同的。 √ 18.常成员指的是类体内使用const关键字说明的常数据成员和常成员函数。

× 19.常数据成员在常成员函数中的值是不允许改变的,而在非常成员函数中是允许改变的。

√ 20.常对象需要引用常成员函数,而不能引用非常成员函数。 × 21.常对象的数据成员都是常数据成员。

√ 22.友元函数是说明在类体内的非成员函数,它可以访问类中的所有成员。

× 23.可以把一个一般函数说明为某类的友元函数,也可以将某类的成员函数说明为另类的友元函数。

√ 24.友元类中的所有成员函数都是友元函数。

√ 25.类型转换函数是一种特殊的成员函数,定义时不加类型说明,无函数参数。 √ 26.单参数的构造函数具有类型转换的作用。 6.2 单选题

1.下列关于类的定义格式的描述中,错误的是( C )。 A.类中成员有3种访问权限

B.类的定义可分说明部分和实现部分

C.类中成员函数都是公有的,数据成员都是私有的 D.定义类的关键字通常用class,也可用struct

2.下列关键字中,不属于定义类时使用的关键字是( D )。 A.class B.struct C.public D.default 3.下列关于成员函数的描述中,错误的是( A )。

1

A.成员函数的定义必须在类体外

B.成员函数可以是公有的,也可以是私有的

C.成员函数在类体外定义时,前加inline可为内联函数 D.成员函数可以设置参数的默认值

4.下列关于对象的描述中,错误的是( D )。 A.定义对象时系统会自动进行初始化

B.对象成员的表示与C语言中结构变量的成员表示相同 C.属于同一个类的对象占有内存字节数相同 D.一个类所能创建对象的个数是有限制的

5.下列关于构造函数的描述中,错误的是( C )。 A.构造函数可以重载 B.构造函数名同类名

C.带参数的构造函数具有类型转换作用 D.构造函数是系统自动调用的

6.下列关于析构函数的描述中,错误的是( A )。 A.析构函数的函数体都为空 B.析构函数是用来释放对象的 C.析构函数是系统自动调用的 D.析构函数是不能重载的

7.下列关于静态成员的描述中,错误的是( C )。 A.静态成员都是使用static来说明的

B.静态成员是属于类的,不是属于某个对象的

C.静态成员只可以用类名加作用域运算符来引用,不可用对象引用 D.静态数据成员的初始化是在类体外进行的 8.下列关于常成员的描述中,错误的是( C )。 A.常成员是用关键字const说明的

B.常成员有常数据成员和常成员函数两种

C.常数据成员的初始化是在类体内定义它时进行的 D.常数据成员的值是不可以改变的

9.下列关于友元函数的描述中,错误的是( B )。 A.友元函数不是成员函数

B.友元函数只可访问类的私有成员 C.友元函数的调用方法同一般函数

D.友元函数可以是另一类中的成员函数

10.下列关于类型转换函数的描述中,错误的是( C )。

A.类型转换函数是一种成员函数

B.类型转换函数定义时不指出类型,也没有参数

C.类型转换函数的功能是将其函数名所指定的类型转换为该类类型 D.类型转换函数在一个类中可定义多个 6.3 填空题

1.类体内成员有3个访问权限,说明它们的关键字分别是 公有 、 私有 和 保护 。 2.使用class定义的表中,成员的默认访问权限是 私有 的;由struct定义的类中,成员的默认的访问权限是 公有 的。

3.如果一个类中没有定义任何构造函数时,系统会自动提供一个 默认 构造函数;同样,类中没有定义析构函数时,系统会自动提供一个 默认 析构函数。

4.静态成员是属于 类 的,它除了可以通过对象名来引用外,还可以使用 类名限定 来引用。

2

5.友元函数是被说明在 类体 内的 非 成员函数。友元函数可访问该类中的 成员。

6.完成下列类的定义。

class A {

public:

A() { a=0; }

int int Geta( A &m); private: int a; };

int Geta( A &m) { return m.a; }

6.4 分析下列程序的输出结果 1.

#include class A {

public: A() {

a1=a2=0;

cout<<\ }

A(int i,int j); ~A()

{ cout<<\ } void Print()

{ cout<<\ private: int a1,a2; };

A::A(int i,int j) { a1=i; a2=j;

cout<<\ }

void main() {

A a,b(5,8); a.Print(); b.Print(); }

答: Default constructor called. Constructor called. a1=0,a2=0 a1=5,a2=8

3

} Destructor called. Destructor called.

2.

#include class B { public: B()

{ cout<<++b<

{ cout<

int B::b=10; void main() {

B b1,b2,b3;

cout<

3.

#include class Date {

public:

Date(int y,int m,int d) {

year=y; month=m; day=d; }

friend void Print(Date &); private:

int year,month,day; };

void Print(Date &d) {

cout<

4

}

void main() {

Date d1(2005,10,1),d2(2005,12,9); Print(d1); Print(d2); }

答: 2005/10/1 2005/12/9

4.

#include class C {

public:

C(int i,int j)

{ c1=i;c2=j; } void Sum(C a,C b) {

c1=a.c1+b.c1; c2=a.c2+b.c2; }

void Print()

{ cout<<\ private: int c1,c2; };

void main() {

C a(6,9); C b(a); C c(b); c.Sum(a,b); c.Print(); }

答: c1=12,c2=18

5.

#include class S {

public: S()

{ PC=0; } S(S &s) {

PC=s.PC;

for(int i=0;i

void Empty() { PC=0; } int IsEmpty()

{ return PC==0; } int IsMemberOf(int n); int Add(int n); void Print(); private:

int elems[100],PC; };

int S::IsMemberOf(int n)

5

}