CPP教学材料-习题答案-第 章a2

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

{
if (s.x <= 1 ) return 1;
else return s.x * Fun(Test(s.x - 1));
}
int main()
{
int sum = 0;
for (int i = 0; i < 6; i++)
sum += Fun(Test(i));
cout << sum << endl;
但定义对象指针p时不调用构造函数;使用new动态创建对象时,根据参数情
况调用“MyClass(char c) { cout << c; }”,输出X;执行“delete p;”时,
需要调用一次析构函数,输出B;最后主函数结束时,对象a调用一次析构函
数答2,案021输 :/3/出D18 B。
14
13.有以下程序:
解析:只要在程序的执行中,需要用一个对象来初始化另一个对象,都要调 用复制构造函数,包括A、B、C三种情况。 答案:D
2021/3/18
12
11.以下关键字不能用来声明类的访问权限的是 。
A)public
B)static
C)protected
D)private
解析:类的访问权限有三种:公有、私有、保护,关键字分别是public, private,protected,。static用于静态成员的声明。 答案:B
该答局案20部:21/3变B/18量a随之消失,与对象无关。obj.a调用的是静态数据成员,结果为151。
14.有以下程序:
class Test
{
private:
long x;
public:
Test(long a): x(a) { }
friend long Fun(Test s);
// 友元
};
long Fun(Test s)
9
答案:A
8.有以下程序: class MyClass { private:
int n; public:
MyClass(int k): n(k){} int Get() { return n; } int Get() const { return n + 1; } }; int main() { MyClass a(5); const MyClass b(6); cout << a.Get() << b.Get() << endl;
int main()
// 主函数main()
{
cout << obj.a << endl;
// 输出a
return 0;
// 返回值0, 返回操作系统
}
运行时输出的结果是 。
A)0
B)1
C)2
D)3
解析:首先初始化静态数据成员a为0,然后在定义全局对象obj时调用构造函
数。这时有两个a,一个是“Test(int a = 6) { Init(); a++;}”函数中的局部变量
// 无参构造函数 // 带参构造函数 // 析构函数 // 主函数main() // 定义变量 // 分配动态空间 // 释放动态空间 // 换行

return 0;
// 返回值0, 返回操作系统
}
执行这个程序,屏幕上将显示输出 。
A)ABX
B)ABXB
C)ABXB
D)AXBB
解析:定义对象a时,调用一次构造函数“MyClass() { cout << "A"; }”,
2021/3/18
13
12.有以下程序: class MyClass { public:
MyClass() { cout << "A"; } MyClass(char c) { cout << c; } ~MyClass() { cout << "B"; } }; int main() { MyClass a, *p; p = new MyClass('X'); delete p; cout << endl;
2021/3/18
8
7.有以下程序:
class Test
{
private:
static int n;
// 静态成员
public:
Test() { n += 2; }
// 构造函数
~Test() { n -= 3; }
// 析构函数
static int GetNum() { return n; }
// 返回n
// 数据成员
// 构造函数 // 返回n // 返回n+1
// 主函数main()
// 定义对象a // 定义对象b // 输出信息
return 0;
// 返回值0, 返回操作系统
}
运行后的输出结果是 。
A)55
B)57
C)75
D)77
解析:const是一个判断重载的标志,a.Get调用“int Get() { return n; }”,
解析:通过常对象只能调用类中的常成员函数,而不能调用类中的其他成员 函数。 答案:A
2021/3/18
11
10.下列情况中,不会调用复制构造函数的是 。 A)用一个对象去初始化同一类的另一个新对象时 B)将类的一个对象赋予该类的另一个对象时 C)函数的形参是类的对象,调用函数进行形参和实参结合时 D)函数的返回值是类的对象的引用,函数执行返回调用时
2021/3/18
5
4.有以下类声明: class MyClass{ int num; }; 则MyClass类的成员num是 。 A)公有数据成员 B)公有成员函数 C)私有数据成员 D)私有成员函数
解析:函数声明时,函数名后必须带“{}”,所以num是数据 成员。在类中,当没有用访问权限标识符标识时,默认为私有权 限。 答案:C
// 私有数据成员 // 构造函数
// 递归结束 // 递归调用 // 主函数main() // 定义变量 // 累加求和 // 输出sum
return 0;
// 返回值0, 返回操作系统
}
运行后的输出结果是 。
A)120
B)16
C)154
D)34
解析:友元函数Fun()参数表中的对象在初始化时需执行构造函数“Test::Test(long
a)”,调用过程为:先调用构造函数Test(i),使Test中x的值为i,再通过友元函数直
接访问Test.x,执行Fun()中的语句,可得到:Fun(Test(0))=1,Fun(Test(1))=1,
Fun(Test(2))=2*1,Fun(Test3)=3*2*1=6,Fun(Test(4))=4*3*2*1=24,
Fun2(0T2e1/s3t/1(85))=5*4*3*2*1=120,sum=1+1+2+6+24+120=154。
16
答案:C
15.有以下程序:
class Test
{
private:
int a;
// 数据成员
public:
Test() { cout << "无参构造函数" << endl; } // 无参构造函数
故得到5,而常对象b执行" b.Get”时,调用常成员函数“int Get() const
{ r2e02tu1/r3n/18n + 1; }”,故得到6+1=7。
10
答案:B
9.由于常对象不能被更新,因此 。 A)通过常对象只能调用它的常成员函数 B)通过常对象只能调用静态成员函数 C)常对象的成员都是常成员 D)通过常对象可以调用任何不改变对象值的成员函数
2021/3/18
3
2.在面向对象方法中,实现信息隐蔽是依靠 。
A)对象的继承
B)对象的多态
C)对象的封装
D)对象的分类
解析:在面向对象方法中,封装性是指将数据和算法捆绑成一个 整体,这个整体就是对象,描述对象的数据被封装在内部,只可 以通过对象提供的算法来进行操作,从而实现信息隐蔽。 答案:C
2021/3/18
Test(int a) { cout << a << endl; }
// 带参构造函数
Test(const Test &copy): a(copy.a)
// 复制构造函数
{ cout << "复制构造函数" << endl; }
~Test() { cout << "析构函数" << endl; }
// 析构函数
序答结案20束:21时 D/3/1调8 用析构函数~Test(),输出“析构函数”并换行。
17
16.有以下程序:
class MyClass
{
private:
int n;
// 数据成员
public:
MyClass(int m): n(m) {}
// 构造函数
void Print() const { cout << "const:n=" << n << " "; } // 常成员函数
4
3.下列关于类和对象的叙述中,错误的是 。 A)一个类只能有一个对象 B)对象是类的具体实例 C)类是某一类对象的抽象 D)类和对象的关系就像数据类型和变量的关系
解析:在面向对象设计中,类是同一种对象的抽象,而不只是对 一个对象的抽象,一个类具有多个对象。对象是类的具体实例。 就像数据类型和变量的关系,一种数据类型可以定义多个变量, 一个变量却只能是一种数据类型。 答案:A
};
int main()
// 主函数main()
{
Test a(3);
// 定义对象
return 0;
// 返回值0, 返回操作系统
}
运行时的输出结果是 。
A)3
B)无参构造函数
C)复制构造函数
D)3
析构函数
析构函数
析构函数
解析:创建对象a时带有参数3,故调用构造函数Test( int a),输出3并换行;程
2021/3/18
6
5.在下列函数原型中,可以作为类AA构造函数的是 。
A)void AA(int);
B)int AA();
C)AA(int) const
D)AA(int);
解析:构造函数用于初始纶对象的数据成员,没有返回类型,而 且由于常成员函数不能更新对象的数据成员,所以常成员函数也 不可能作为构造函数。 答案:D
void Print() { cout << "n=" << n << " "; }
// 非常成员函数
a,另一个是静态数据成员a,需要靠作用域来区分。在执行Init()时,由于离开
了构造函数“Test(int a = 6) { Init(); a++;}”的作用域,Init()里的a为静态数据
成员,这时静态数据成员a赋值为1;之后回到构造函数执行a++,这个a为
“Test(int a = 6) { Init(); a++;}”中的a,值变为7,但当构造函数执行完毕后,
2021/3/18
7
6.下列关于this指针的叙述中,正确的是 。 A)任何与类相关的函数都有this指针 B)类的成员函数都有this指针 C)类的友元函数都有this指针 D)类的非静态成员函数才有this指针
解析:this指针只能在类的成员函数中使用,它指向该成员函数 被调用的对象。但是有两种与类相关的函数都没有this指针,即 静态成员函数和友元函数。 答案:D
};
int Test::n = 1;
// 初始化n
int main()
// 主函数main()
{
Test *p = new Test; // 定义指针p
delete p;
// 释放p指向的动太对象
cout << "n=" << Test::GetNum() << endl;// 输出n
return 0;
20XX年复习资料
大学复习资料
专 业: 班 级: 科目老师: 日 期:
C++面向对象程序设计教程
第2章 类和对象 习题解答
2021/3/18
2
一、选择题
1.下列选项中,不属于面向对象程序设计特征的是 。
A)继承性
B)多态性
C)类比性
D)封装性
解析:封装性、继承性和多态性是面向对象思想的3个主要特征。 封装性指将数据和算法捆绑成一个整体,这个整体就是对象,描 述对象的数据被封装在其内部。继承性是指一种事物保留了另一 种事物的全部特征,并且具有自身的独有特征。多态性主要指当 多个事物继承自一种事物时,同一操作在它们之间表现出不同的 行为。 答案:C
// 返回值0, 返回操作系统
}
执行后的输出结果是 。
A)n=0
B)n=1
C)n=2
D)n=3
解析:静态数据成员初始化的值为1,执行“Test *p = new Test”将调用构
造函数,执行“n += 2;”,n的值变为3,执行“delete p;”时将调用析构函
数2,021执/3/行18“n -= 3;”,n的值减3,变为0。
class Test
{
public:
static int a;
// 静态成员
void Init() { a = 1; }
// 初始化函数
Test(int a = 6) { Init(); a++;} // 构造函数
};
int Test::a = 0;
// 初始化a
Test obj;
// 定义全局对象
相关文档
最新文档