C++课后习题答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类外的函数对它们的访问都是非法的。× 8. 某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。 9. 可以在类的构造函数中对静态数据成员进行初始化。× 10. 如果一个成员函数只存取一个类的静态数据成员,则可将该成员函数说
明为静态成员函数。√ 三、 分析下列程序的输出结果。 1. #include<iostream.h> class A { public:
-9-
B. p=A::f1;; C. p=A::f1(); D. p=f1(); 4. 已知:p 是一个指向类 A 数据成员 m 的指针,A1 是类 A 的一个对象。如果要给 m 赋值为 5,( )是正确的。 A. A1.p=5; B. A1->p=5; C. A.*p=5; D. *A1.p=5。 5. 已知:类 A 中一个成员函数说明如下:void Set(A&a);其中,A &a 的含意是( ) A. 指向类 A 的指针为 a; B. 将 a 的地址值赋给变量 Set; C. a 是类 A 的对象引用,用来作函数 Set()的形参; D. 变量 A 与 a 按位相与作为函数 Set()的参数。 6. 下列关于对象数组的描述中,( )是错的。 A. 对象数组的下标是从 0 开始的; B. 对象数组的数组名是一个常量指针; C. 对象数组的每个元素是同一个类的对象; D. 对象数组只能赋初值,而不能被赋值。 7. 下列定义中,( )是定义指向数组的指针 p。 E. int *p[5]; F. int (*p)[5]; A. (int *)p[5]; B. int *p[ ]; 8. 下列说明中,const char *ptr; ptr 应该是( )。 A. 指向字符常量的指针; B. 指向字符的常量指针; C. 指向字符串常量的指针; D. 指向字符串的常量指针。 9. 已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,( ) 是正确的。
cout<<elems[PC-1]; cout<<”}”<<endl; } void reverse(Set *m) { int n=m->PC/2; for(int i=0;i<n;i++) { int temp; temp=m->elems[i]; m->elems[i]=m->elems[m->PC-i-1]; m->elems[m->PC-i-1]=temp; } } void main() { Set A; cout<<A.IsEmpty()<<endl; A.Print(); Set B;
A.void print () const; B.const void print(); C.void const print(); D.void print(const); 10.关于 new 运算符的下列描述中,( )是错的。
- 10 -
A. 它可以用来动态创建对象和对象数组; B. 使用它创建的对象或对象数组可以使用运算符 delete 删除; C. 使用它创建对象时要调用构造函数; D. 使用它创建对象数组时必须指定初始值。 11.关于 delete 运算符的下列描述中,( )是错的。 A. 它必须用于 new 返回的指针; B. 它也适用于空指针; C. 对一个指针可以使用多次该运算符; D. 指针名前只用一对方括号符,不管所删除数组的维数。 12.具有转换函数功能的构造函数,应该是( )。 A. 不带参数的构造函数; B. 带有一个参数的构造函数; C. 带有两个以上参数的构造函数; D. 缺省构造函数; 二、 判断下列描述的正确性,对者划√,错者划×。
-6-
5. #include<iostream.h> class Set { public:
Set(){PC=0;} Set(Set &s); void Empty() {PC=0;} int IsEmpty() {return PC= =0;} int IsMemberOf(int n); int Add(int n); void Print(); friend void reverse(Set *m); private: int elems[100]; int PC; }; int Set::IsMemberOf(int n) { for (int i=0;i<PC;i++) if(elems[i]= =n)
1. 指向对象的指针和指向类的成员的指针在表示形式上是不相同的。√ 2. 已知:m 是类 A 的对象,n 是类 A 的公有数据成员,p 是指向类 A 中 n
-5-
public: Count () {count++;} static int HM(){return count;} ~Count(){count--;} private: static int count; }; int Count::count=100; void main() { Count c1,c2,c3,c4; cout<<Count::HM()<<endl; } 104 4. #include<iostream.h> class A { public: A(double t,double r){Total=t;Rate=r;} friend double Count(A&a)
-4-
class A { public:
A(); A(int i,int j); void printa( ); private: B c; };
A::A(int i,int j):c(i,j) {} void A::printa() { c.printb(); } B::B(int i,int j) { a=i; b=j; } void B::printb() { cout<<”a=”<<a<<”,b=”<<b<<endl; } void main() { A m(7,9); m.printa(); } A=7,b=9 3. #include<iostream.h> class Count {
1. 使用关键字 class 定义的类中缺省的访问权限是私有(private)的。√ 2. 作用域运算符(::)只能用来限定成员函数所属的类。√ 3. 析构函数是一种函数体为空的成员函数。× 4. 构造函数和析构函数都不能重载。× 5. 说明或定义对象时,类名前面不需要加 class 关键字。√ 6. 对象成员的表示与结构变量成员表示相同,使用运算符.或->。√ 7. 所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何
-8-
for(int i=1;i<=8;i++) B.Add(i); B.Print(); cout<<B.IsMemberOf(5)<<endl; B.Empty(); for(int j=11;j<20;j++) B.Add(j); Set C(B); C.Print(); reverse (&C); C.Print(); }
3. 作用域运算符的功能是( )。
A. 标识作用域的级别的;B. 指出作用域的范围的;
A. 给定作用域的大小的;D. 标识某个成员是属于哪个类的。
4. 下列不是成员函数的是( )。
A. 构造函数;
B.友元函数;
C.析构函数;
D.类型转换函数。
5. ( )不是构造函数的特征
A. 构造函数的函数名与类名相同;
-1-
第五章 习题
ຫໍສະໝຸດ Baidu一、 选择填空
1. 在下列关键字中,用以说明类中公有成员的是( )
A. public; B. private; C. protected; D. friend;
2. 下列的各类函数中,( )不是类的成员函数。
A. 构造函数; B. 析构函数; C . 友元函数; D. 拷贝初始化构造函数;
A(); A(int i,int j); void print( ); private: int a,b; }; A::A( )
-3-
{ a=b=0; cout<<”Default constructor called.\n”;
} A::A(int i,int j) { a=i; b=j; cout<<”Constructor called.\n”; } void A::print() { cout<<”a=”<<a<<”,b=”<<b<<endl; } void main() { A m,n(4,8); m.print(); n.print(); } Default constructor called. Constructor called. A=0,b=0 A=4,b=8 2. #include<iostream.h> class B { public: B(); B(int i,int j); void printb( ); private: int a,b; };
1 {} {1,2,3,4,5,6,7,8} 1 {11,12,13,14,15,16,17,18,19} {19,18,17,16,15,14,13,12,11}
第六章 习题
一、 选择填空 1. 已知一个类 A,( )是指向类 A 成员函数的指针。假设类有三个公有成员:void f1(int), void f2(int)和 int a。 A. A*p; B. int A::*pc=&A::a; C. void A::*pa; D. A *pp; 2. 运算符->* 的功能是( )。 A. 用来表示指向对象指针对指向类成员指针的操作; B. 用来表示对象对指向类成员指针的操作; C. 用来表示指向对象指针对类成员的操作; D. 用来表示对象类成员的操作。 3. 已知 f1(int)是类 A 的公有成员函数,p 是指向成员函数 f1()的指针,采用( ) 是正确的。 A. p=f1;
B. 构造函数可以重载;
C. 构造函数可以设置缺省参数;
D. 构造函数必须指定类型说明。
6. ( )是析构函数的特征。
A. 一个类中只能定义一个析构函数;
B. 析构函数与类名不同;
C. 析构函数的定义只能在类体内;
D. 析构函数可以有各个或多个参数。
7. 通常的拷贝初始化函数的参数是( )。
A. 某个对象名;
return 1; return 0; } int Set::Add(int n) { if(IsMemberOf(n))
return 1; else if(PC>=100)
return 0; else
{ elems[PC++]=n; return 1;
-7-
} } Set::Set(Set &p) { PC=p.PC; for(int i=0;i<PC;i++) elems[i]=p.elems[i]; } void Set::Print() { cout<<”{“; for (int i=0;i<PC-1;i++) cout<<elems[i]<<”,”; if(PC>0)
{ a.Total+=a.Rate*a.Total; return a.Total; } private: double Total,Rate; }; void main() { A a1(1000.0,0.035),a2(768.0,0.028); cout<<Count(a1)<<”,”<<Count(a2)<<endl; } 1035,789,504
B. 某个对象的成员名;
C. 某个对象的引用名;
D. 某个对象的指针名;
8. 关于成员函数特征的下述描述中,( )是错误的。
A. 成员函数一般是内联函数;
B. 成员函数可以重载;
C. 成员函数可以设置参数的缺省值;
D. 成员函数可以是静态的。
9. 下述静态数据成员的特征中,( )是错误的。
-2-
A. 说明静态数据成员时前边要加修饰符 static; A. 静态数据成员要在类体外进行初始化; B. 引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符; C. 静态数据成员不是所有对象所共用的。 10.友元的作用( )。 A. 提高程序的运用效率; B. 加强类的封装性; C. 实现数据的隐藏性; D. 增加成员函数的种类。 二、 判断下列描述的正确性,对者划√,错者划×。
明为静态成员函数。√ 三、 分析下列程序的输出结果。 1. #include<iostream.h> class A { public:
-9-
B. p=A::f1;; C. p=A::f1(); D. p=f1(); 4. 已知:p 是一个指向类 A 数据成员 m 的指针,A1 是类 A 的一个对象。如果要给 m 赋值为 5,( )是正确的。 A. A1.p=5; B. A1->p=5; C. A.*p=5; D. *A1.p=5。 5. 已知:类 A 中一个成员函数说明如下:void Set(A&a);其中,A &a 的含意是( ) A. 指向类 A 的指针为 a; B. 将 a 的地址值赋给变量 Set; C. a 是类 A 的对象引用,用来作函数 Set()的形参; D. 变量 A 与 a 按位相与作为函数 Set()的参数。 6. 下列关于对象数组的描述中,( )是错的。 A. 对象数组的下标是从 0 开始的; B. 对象数组的数组名是一个常量指针; C. 对象数组的每个元素是同一个类的对象; D. 对象数组只能赋初值,而不能被赋值。 7. 下列定义中,( )是定义指向数组的指针 p。 E. int *p[5]; F. int (*p)[5]; A. (int *)p[5]; B. int *p[ ]; 8. 下列说明中,const char *ptr; ptr 应该是( )。 A. 指向字符常量的指针; B. 指向字符的常量指针; C. 指向字符串常量的指针; D. 指向字符串的常量指针。 9. 已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,( ) 是正确的。
cout<<elems[PC-1]; cout<<”}”<<endl; } void reverse(Set *m) { int n=m->PC/2; for(int i=0;i<n;i++) { int temp; temp=m->elems[i]; m->elems[i]=m->elems[m->PC-i-1]; m->elems[m->PC-i-1]=temp; } } void main() { Set A; cout<<A.IsEmpty()<<endl; A.Print(); Set B;
A.void print () const; B.const void print(); C.void const print(); D.void print(const); 10.关于 new 运算符的下列描述中,( )是错的。
- 10 -
A. 它可以用来动态创建对象和对象数组; B. 使用它创建的对象或对象数组可以使用运算符 delete 删除; C. 使用它创建对象时要调用构造函数; D. 使用它创建对象数组时必须指定初始值。 11.关于 delete 运算符的下列描述中,( )是错的。 A. 它必须用于 new 返回的指针; B. 它也适用于空指针; C. 对一个指针可以使用多次该运算符; D. 指针名前只用一对方括号符,不管所删除数组的维数。 12.具有转换函数功能的构造函数,应该是( )。 A. 不带参数的构造函数; B. 带有一个参数的构造函数; C. 带有两个以上参数的构造函数; D. 缺省构造函数; 二、 判断下列描述的正确性,对者划√,错者划×。
-6-
5. #include<iostream.h> class Set { public:
Set(){PC=0;} Set(Set &s); void Empty() {PC=0;} int IsEmpty() {return PC= =0;} int IsMemberOf(int n); int Add(int n); void Print(); friend void reverse(Set *m); private: int elems[100]; int PC; }; int Set::IsMemberOf(int n) { for (int i=0;i<PC;i++) if(elems[i]= =n)
1. 指向对象的指针和指向类的成员的指针在表示形式上是不相同的。√ 2. 已知:m 是类 A 的对象,n 是类 A 的公有数据成员,p 是指向类 A 中 n
-5-
public: Count () {count++;} static int HM(){return count;} ~Count(){count--;} private: static int count; }; int Count::count=100; void main() { Count c1,c2,c3,c4; cout<<Count::HM()<<endl; } 104 4. #include<iostream.h> class A { public: A(double t,double r){Total=t;Rate=r;} friend double Count(A&a)
-4-
class A { public:
A(); A(int i,int j); void printa( ); private: B c; };
A::A(int i,int j):c(i,j) {} void A::printa() { c.printb(); } B::B(int i,int j) { a=i; b=j; } void B::printb() { cout<<”a=”<<a<<”,b=”<<b<<endl; } void main() { A m(7,9); m.printa(); } A=7,b=9 3. #include<iostream.h> class Count {
1. 使用关键字 class 定义的类中缺省的访问权限是私有(private)的。√ 2. 作用域运算符(::)只能用来限定成员函数所属的类。√ 3. 析构函数是一种函数体为空的成员函数。× 4. 构造函数和析构函数都不能重载。× 5. 说明或定义对象时,类名前面不需要加 class 关键字。√ 6. 对象成员的表示与结构变量成员表示相同,使用运算符.或->。√ 7. 所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何
-8-
for(int i=1;i<=8;i++) B.Add(i); B.Print(); cout<<B.IsMemberOf(5)<<endl; B.Empty(); for(int j=11;j<20;j++) B.Add(j); Set C(B); C.Print(); reverse (&C); C.Print(); }
3. 作用域运算符的功能是( )。
A. 标识作用域的级别的;B. 指出作用域的范围的;
A. 给定作用域的大小的;D. 标识某个成员是属于哪个类的。
4. 下列不是成员函数的是( )。
A. 构造函数;
B.友元函数;
C.析构函数;
D.类型转换函数。
5. ( )不是构造函数的特征
A. 构造函数的函数名与类名相同;
-1-
第五章 习题
ຫໍສະໝຸດ Baidu一、 选择填空
1. 在下列关键字中,用以说明类中公有成员的是( )
A. public; B. private; C. protected; D. friend;
2. 下列的各类函数中,( )不是类的成员函数。
A. 构造函数; B. 析构函数; C . 友元函数; D. 拷贝初始化构造函数;
A(); A(int i,int j); void print( ); private: int a,b; }; A::A( )
-3-
{ a=b=0; cout<<”Default constructor called.\n”;
} A::A(int i,int j) { a=i; b=j; cout<<”Constructor called.\n”; } void A::print() { cout<<”a=”<<a<<”,b=”<<b<<endl; } void main() { A m,n(4,8); m.print(); n.print(); } Default constructor called. Constructor called. A=0,b=0 A=4,b=8 2. #include<iostream.h> class B { public: B(); B(int i,int j); void printb( ); private: int a,b; };
1 {} {1,2,3,4,5,6,7,8} 1 {11,12,13,14,15,16,17,18,19} {19,18,17,16,15,14,13,12,11}
第六章 习题
一、 选择填空 1. 已知一个类 A,( )是指向类 A 成员函数的指针。假设类有三个公有成员:void f1(int), void f2(int)和 int a。 A. A*p; B. int A::*pc=&A::a; C. void A::*pa; D. A *pp; 2. 运算符->* 的功能是( )。 A. 用来表示指向对象指针对指向类成员指针的操作; B. 用来表示对象对指向类成员指针的操作; C. 用来表示指向对象指针对类成员的操作; D. 用来表示对象类成员的操作。 3. 已知 f1(int)是类 A 的公有成员函数,p 是指向成员函数 f1()的指针,采用( ) 是正确的。 A. p=f1;
B. 构造函数可以重载;
C. 构造函数可以设置缺省参数;
D. 构造函数必须指定类型说明。
6. ( )是析构函数的特征。
A. 一个类中只能定义一个析构函数;
B. 析构函数与类名不同;
C. 析构函数的定义只能在类体内;
D. 析构函数可以有各个或多个参数。
7. 通常的拷贝初始化函数的参数是( )。
A. 某个对象名;
return 1; return 0; } int Set::Add(int n) { if(IsMemberOf(n))
return 1; else if(PC>=100)
return 0; else
{ elems[PC++]=n; return 1;
-7-
} } Set::Set(Set &p) { PC=p.PC; for(int i=0;i<PC;i++) elems[i]=p.elems[i]; } void Set::Print() { cout<<”{“; for (int i=0;i<PC-1;i++) cout<<elems[i]<<”,”; if(PC>0)
{ a.Total+=a.Rate*a.Total; return a.Total; } private: double Total,Rate; }; void main() { A a1(1000.0,0.035),a2(768.0,0.028); cout<<Count(a1)<<”,”<<Count(a2)<<endl; } 1035,789,504
B. 某个对象的成员名;
C. 某个对象的引用名;
D. 某个对象的指针名;
8. 关于成员函数特征的下述描述中,( )是错误的。
A. 成员函数一般是内联函数;
B. 成员函数可以重载;
C. 成员函数可以设置参数的缺省值;
D. 成员函数可以是静态的。
9. 下述静态数据成员的特征中,( )是错误的。
-2-
A. 说明静态数据成员时前边要加修饰符 static; A. 静态数据成员要在类体外进行初始化; B. 引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符; C. 静态数据成员不是所有对象所共用的。 10.友元的作用( )。 A. 提高程序的运用效率; B. 加强类的封装性; C. 实现数据的隐藏性; D. 增加成员函数的种类。 二、 判断下列描述的正确性,对者划√,错者划×。