C面向对象程序设计教学教程课后知识题目解析(游洪跃).ppt
《C面向对象程序设计教学教程课后知识题目解析(游洪跃).ppt》由会员分享,可在线阅读,更多相关《C面向对象程序设计教学教程课后知识题目解析(游洪跃).ppt(176页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+面向对象程序设计教程,第1章 C+程序设计基础 习题解答,一、选择题,1下列语句中,错误的是 。 A)const int buffer = 256; B)const int temp; C)const double *point; D)double * const pt = new double(5.5); 解析:修饰符const声明的常量只能被读取,该常量必须在声明时进行初始化,并且它的值在程序中不能改变。选项B)没有初始化,错误。选项C)定义了一个指向const double的指针,其意义为指针 point指向的变量不能通过指针point来改变,D)中表示指针pt是常量指针,已在声明时
2、进行了初始化。 答案:B,2关于函数重载,下列叙述中错误的是 。 A)重载函数的函数名必须相同 B)重载函数必须在参数个数或类型上有所不同 C)重载函数的返回值类型必须相同 D)重载函数的函数体可以有所不同 解析:函数重载是用同一个函数名字在不同的参数类型或参数个数上做类似的操作方作,它们的实现方法可以不同。所以说,重载函数的函数名必须相同,函数体可以有所不同。函数重载必须在参数类型或参数个数上不一样,不能依靠返回值不一样来区分重载函数。 答案:C,3有以下程序: void Fun(int i, int j) cout i + j endl;/ 输出i+j void Fun(int i) co
3、ut i+ endl;/ 输出i+ int main()/ 主函数main() int a = 1;/ 定义变量i Fun(a);/ 调用Fun() return 0; / 返回值0, 返回操作系统 该程序执行后输出的结果是 。 A)1 B)2 C)3 D)4 解析:由于主函数中调用的Fun()函数只有一个参数,故执行的是void Fun( int i )的版本,执行“cout i+ endl;”时,由于是后缀“+”,所以先输出i的值1,再使i加1。 答案:A,二、编程题,1编写一个C+程序,要求输出“欢迎学习C+语言!”。 参考程序: #include / 编译预处理命令 using nam
4、espace std;/ 使用命名空间std int main()/ 主函数main() cout 欢迎学习C+语言! endl;/ 用C+的方法输出一行 system(PAUSE);/ 调用库函数system( ),输出提示信息 return 0; / 返回值, 返回操作系统 ,*2编一个程序,用一个函数实现求n个整型数据的最小值。函数原型如下: int Min(int a, int n) 参考程序: #include / 编译预处理命令 using namespace std;/ 使用命名空间std int Min(int a, int n)/ 求n个整型数据的最小值 int m = a0
5、, i;/ 临时变量 for (i = 1; i n; i+) / 依次比较求最小值 if (ai m) / 如果ai更小 m = ai;/ ai为当前最小值 return m;/ 返回最小值 int main()/ 主函数main() int a = 1, 2, 3, 4, 5, 6, 7, 8, 9, -10, n = 10; cout 最小值为 Min(a, n) endl;/ 输出最小值 system(PAUSE);/ 调用库函数system( ),输出提示信息 return 0; / 返回值, 返回操作系统 ,3求2个数或3个整数中的最大数,用两个同名函数实现,要求编写测试程序。 参
6、考程序: #include / 编译预处理命令 using namespace std;/ 使用命名空间std int Max(int x, int y)/ 求x,y的最大值 return x y ? x : y;/ 返回x,y的最大值 int Max(int x, int y, int z)/ 求x,y,z的最大值 int m = x y ? x : y;/ x,y的最大值 m = m z ? m : z;/ m,z的最大值 return m;/ 返回x,y,z的最大值 int main()/ 主函数main() cout 2,3的最大值为 Max(2, 3) endl; cout 1,6,
7、8的最大值为 Max(1, 6, 8) endl; system(PAUSE);/ 调用库函数system( ),输出提示信息 return 0; / 返回值, 返回操作系统 ,4用变量的引用作函数形参,实现交换两个整型变量,要求编写测试程序。 参考程序: #include / 编译预处理命令 using namespace std;/ 使用命名空间std void Swap(int / 返回值, 返回操作系统 ,*5编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度实型、双精度实型,用重载函数实现。 参考程序: #include / 编译预处理命令 using
8、namespace std;/ 使用命名空间std void Sort(int a, int n)/ 对a0.an-1进行排序 int tem, i, j;/ 定义变量 for (i = 0; i aj) / ai比aj更大 tem = ai; ai = aj; aj = tem; ,*5编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度实型、双精度实型,用重载函数实现。 参考程序: void Sort(float a, int n)/ 对a0.an-1进行排序 float tem;/ 临时变量 int i, j;/ 定义变量 for (i = 0; i aj)
9、/ ai比aj更大 tem = ai; ai = aj; aj = tem; ,*5编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度实型、双精度实型,用重载函数实现。 参考程序: void Sort(double a, int n)/ 对a0.an-1进行排序 double tem;/ 临时变量 int i, j;/ 定义变量 for (i = 0; i aj) / ai比aj更大 tem = ai; ai = aj; aj = tem; ,*5编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度实型、双精度实型,用重载函数实现。 参
10、考程序: int main()/ 主函数main() int a = 1, 3, 2, 5, 6, 9, 0, 6;/ 定义a float b = 1.6, 3.3, 2.8, 5.6, 6.8, 9.6, 0.6, 6.8;/ 定义b double c = 1.2, 3.1, 2.6, 5.8, 6.8, 9.8, 0.8, 6.2;/ 定义c int i, n = 8;/ 定义变量 Sort(a, n);/ 对a排序 cout a:;/ 输出提示 for (i = 0; i n; i+) cout ai ;/ 输出ai cout endl;/ 换行 ,*5编一个程序,用同一个函数名对n个数
11、据进行从小到大排序,数据类型可以是整型、单精度实型、双精度实型,用重载函数实现。 参考程序: Sort(b, n);/ 对b排序 cout b:;/ 输出提示 for (i = 0; i n; i+) cout bi ;/ 输出bi cout endl;/ 换行 Sort(c, n);/ 对c排序 cout c:;/ 输出提示 for (i = 0; i n; i+) cout ci ;/ 输出ci cout endl;/ 换行 system(PAUSE);/ 调用库函数system( ),输出系统提示信息 return 0; / 返回值, 返回操作系统 ,C+面向对象程序设计教程,第2章 类
12、和对象 习题解答,一、选择题,1下列选项中,不属于面向对象程序设计特征的是 。 A)继承性B)多态性 C)类比性D)封装性 解析:封装性、继承性和多态性是面向对象思想的3个主要特征。封装性指将数据和算法捆绑成一个整体,这个整体就是对象,描述对象的数据被封装在其内部。继承性是指一种事物保留了另一种事物的全部特征,并且具有自身的独有特征。多态性主要指当多个事物继承自一种事物时,同一操作在它们之间表现出不同的行为。 答案:C,2在面向对象方法中,实现信息隐蔽是依靠 。 A)对象的继承B)对象的多态 C)对象的封装D)对象的分类 解析:在面向对象方法中,封装性是指将数据和算法捆绑成一个整体,这个整体就
13、是对象,描述对象的数据被封装在内部,只可以通过对象提供的算法来进行操作,从而实现信息隐蔽。 答案:C,3下列关于类和对象的叙述中,错误的是 。 A)一个类只能有一个对象 B)对象是类的具体实例 C)类是某一类对象的抽象 D)类和对象的关系就像数据类型和变量的关系 解析:在面向对象设计中,类是同一种对象的抽象,而不只是对一个对象的抽象,一个类具有多个对象。对象是类的具体实例。就像数据类型和变量的关系,一种数据类型可以定义多个变量,一个变量却只能是一种数据类型。 答案:A,4有以下类声明: class MyClass int num; ; 则MyClass类的成员num是 。 A)公有数据成员 B
14、)公有成员函数 C)私有数据成员 D)私有成员函数 解析:函数声明时,函数名后必须带“”,所以num是数据成员。在类中,当没有用访问权限标识符标识时,默认为私有权限。 答案:C,5在下列函数原型中,可以作为类AA构造函数的是 。 A)void AA(int);B)int AA(); C)AA(int) const D)AA(int); 解析:构造函数用于初始纶对象的数据成员,没有返回类型,而且由于常成员函数不能更新对象的数据成员,所以常成员函数也不可能作为构造函数。 答案:D,6下列关于this指针的叙述中,正确的是 。 A)任何与类相关的函数都有this指针 B)类的成员函数都有this指针
15、 C)类的友元函数都有this指针 D)类的非静态成员函数才有this指针 解析:this指针只能在类的成员函数中使用,它指向该成员函数被调用的对象。但是有两种与类相关的函数都没有this指针,即静态成员函数和友元函数。 答案:D,7有以下程序: class Test private: static int n;/ 静态成员 public: Test() n += 2; / 构造函数 Test() n -= 3; / 析构函数 static int GetNum() return n; / 返回n ; int Test:n = 1;/ 初始化n int main()/ 主函数main() Te
16、st *p = new Test;/ 定义指针p delete p;/ 释放p指向的动太对象 cout n= Test:GetNum() endl;/ 输出n return 0; / 返回值0, 返回操作系统 执行后的输出结果是 。 A)n=0 B)n=1 C)n=2 D)n=3 解析:静态数据成员初始化的值为1,执行“Test *p = new Test”将调用构造函数,执行“n += 2;”,n的值变为3,执行“delete p;”时将调用析构函数,执行“n -= 3;”,n的值减3,变为0。 答案:A,8有以下程序: class MyClass private: int n;/ 数据成员
17、 public: MyClass(int k): n(k)/ 构造函数 int Get() return n; / 返回n int Get() const return n + 1; / 返回n+1 ; int main()/ 主函数main() MyClass a(5);/ 定义对象a const MyClass b(6);/ 定义对象b cout a.Get() b.Get() endl;/ 输出信息 return 0; / 返回值0, 返回操作系统 运行后的输出结果是 。 A)55 B)57 C)75 D)77 解析:const是一个判断重载的标志,a.Get调用“int Get() r
18、eturn n; ”,故得到5,而常对象b执行 b.Get”时,调用常成员函数“int Get() const return n + 1; ”,故得到6+1=7。 答案:B,9由于常对象不能被更新,因此 。 A)通过常对象只能调用它的常成员函数 B)通过常对象只能调用静态成员函数 C)常对象的成员都是常成员 D)通过常对象可以调用任何不改变对象值的成员函数 解析:通过常对象只能调用类中的常成员函数,而不能调用类中的其他成员函数。 答案:A,10下列情况中,不会调用复制构造函数的是 。 A)用一个对象去初始化同一类的另一个新对象时 B)将类的一个对象赋予该类的另一个对象时 C)函数的形参是类的对
19、象,调用函数进行形参和实参结合时 D)函数的返回值是类的对象的引用,函数执行返回调用时 解析:只要在程序的执行中,需要用一个对象来初始化另一个对象,都要调用复制构造函数,包括A、B、C三种情况。 答案:D,11以下关键字不能用来声明类的访问权限的是 。 A)public B)static C)protected D)private 解析:类的访问权限有三种:公有、私有、保护,关键字分别是public,private,protected,。static用于静态成员的声明。 答案:B,12有以下程序: class MyClass public: MyClass() cout A; / 无参构造函数
20、 MyClass(char c) cout c; / 带参构造函数 MyClass() cout B; / 析构函数 ; int main()/ 主函数main() MyClass a, *p;/ 定义变量 p = new MyClass(X);/ 分配动态空间 delete p;/ 释放动态空间 cout endl;/ 换行 return 0; / 返回值0, 返回操作系统 执行这个程序,屏幕上将显示输出 。 A)ABX B)ABXB C)ABXB D)AXBB 解析:定义对象a时,调用一次构造函数“MyClass() cout A; ”,但定义对象指针p时不调用构造函数;使用new动态创建
21、对象时,根据参数情况调用“MyClass(char c) cout c; ”,输出X;执行“delete p;”时,需要调用一次析构函数,输出B;最后主函数结束时,对象a调用一次析构函数,输出B。 答案:D,13有以下程序: class Test public: static int a;/ 静态成员 void Init() a = 1; / 初始化函数 Test(int a = 6) Init(); a+;/ 构造函数 ; int Test:a = 0;/ 初始化a Test obj;/ 定义全局对象 int main()/ 主函数main() cout obj.a endl;/ 输出a r
22、eturn 0; / 返回值0, 返回操作系统 运行时输出的结果是 。 A)0 B)1 C)2 D)3 解析:首先初始化静态数据成员a为0,然后在定义全局对象obj时调用构造函数。这时有两个a,一个是“Test(int a = 6) Init(); a+;”函数中的局部变量a,另一个是静态数据成员a,需要靠作用域来区分。在执行Init()时,由于离开了构造函数“Test(int a = 6) Init(); a+;”的作用域,Init()里的a为静态数据成员,这时静态数据成员a赋值为1;之后回到构造函数执行a+,这个a为“Test(int a = 6) Init(); a+;”中的a,值变为7
23、,但当构造函数执行完毕后,该局部变量a随之消失,与对象无关。obj.a调用的是静态数据成员,结果为1。 答案:B,14有以下程序: class Test private: long x;/ 私有数据成员 public: Test(long a): x(a) / 构造函数 friend long Fun(Test s);/ 友元 ; long Fun(Test s) if (s.x = 1 ) return 1;/ 递归结束 else return s.x * Fun(Test(s.x - 1);/ 递归调用 int main()/ 主函数main() int sum = 0;/ 定义变量 fo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 教学 教程 课后 知识 题目 解析 游洪跃
限制150内