C++面向对象程序设计课后答案

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

Char k:4; Unsigned short i:8; Unsigned long m; }; Main(0 { struct A a; a.t=’b’; printf(“%x”,a.t); } 答:输出是 2
习题3
3-1 New delete与malloc free的联系与区别是什么? 答;在程序开发中的内存的动态分配与管理是一个让开发者头痛的问 题,在C中,一般通过malloc和free来进行内存分配和回收,而在 C++中,new和delete已经完全包含malloc和free的功能,并且更为强大。 它们的区别是malloc和free是库函数而不是运算符,不在编译器控制权 限之内,而new和delete是运算符。New出来的指针式直接带类型信息, 而malloc返回是void指针。 3-2 描述内存分配以及它们的区别。 答:内存分配的“堆”和“栈”。主要区别是:(1)管理方式和碎片问题: 对于栈来说,由编译器自动管理;对于堆来说,释放工作由程序员控 制,容易产生内存碎片。(2)分配效率:栈的效率要比堆的高得多; (3):增长方式不同:栈内存是从高地址到低地址增长,而堆是相反 的;(4)空间大小的不同:一般来讲,在32位系统下,内存可以达到 4GB空间,但对于栈来讲,一般都是有一定的空间大小的。 3-3 请定义一个变量,初始化为34759,并以八进制与十六进制输出。 如果将该整数定义成无符号短整数,当以有有符号数输出时,结果是什 么? 答;程序如下: #include<iostream> using namespace std; void main() { int i=34759;
习题1
-1 面向对象程序设计与面向过程程序设计相比有什么优点? 答:优点有:(1)写程序不再是从计算机的角度考虑问题,而是站在 人类思维的角度;(2)程序的可拓展性比其他不是面向对象的好; (3)能最大限度波爱护已有程序的代码。 -2 简述C++语言程序的特点。 答:C++语言是在C语言的基础上发展而来,但它比C语言更容易学习和 掌握,它与C的最大区别是把函数放进了结构中,并引入了新的关键词 类。C++完美的体现了面向对象的各种特性。 1-3 C++与C语言的关系如何?它们的本质区别是什么? 答:C++语言是基于C语言的基础上发展起来的。它们的关系十分密切, 很多语句之间是通用的。它们的本质区别是C语言是面向过程的编程语 言,而C++是面向对象的编程语言。 -3 组件编程有什么优点? 答:组件编程的优点是它把对象技术应用于系统设计,对面向对象的程 序设计的实现过程做了进一步抽象。它强调真正的软件可重用性和高度 的互操作性。
2-4 什么是函数重载?编译系统如何区别同名函数的不同版本? 答:C++允许用同一函数名定义多个函数,这函数的参数个数和参数类 型不同,这就是函数的重载。在编译时,编译系统会根据同名函数的参 数不同等对名字做处理。 2-5 什么是“引用”?申明和使用“引用”要注意哪些? 答;引用就是某一变量的一个别名,对引用的操作与对变量直接操作是 完全一样。申明和使用引用要注意:(1)不同有NULL引用,引用必须 与合法的存储单元关联;(2)引用被创建的同时,必须初始化;(3) 一旦引用被初始化,就不能改变引用关系,但指定对象其内容可以改 变。 2—7 简述C++函数3种调用的方式实现机制,特点及其实参,形参格式。 答:在C++中,有按值传递,地址传递,引用传递3种的函数调用方式, 按值传递的过程为:首先计算出实参表达式值,给对应的形参变量分配 一个存储空间,该空间大小等于形参类型,然后把求出的实参的值一一 存入形参变量的存储空间中,成为形参变量的初值。种种传递是把实参 表达式的值传递给对应的形参变量,使用这种方式,调用函数不对实参 进行操作。而抵制传世是如果函数定义时将形参说明成指针,对这样的 函数进行调用时需要指定地址形式的实参。 2-8 写出下面程序的输出 Union { int i; char x[2]; }a; Void main(0 { a.x[0]=10; a. x[1]=1; printf(“%d”,a.i); } 答:输出是 266 2-10 写出下面程序的输出 struct A { char t:4;
Assignment
4-14 设计一个点类Point,求两个点直接的距离 答:程序如下 #include<iostream> #include<cmath> using namespace std; class point { public: void Distance(int x1,int y1,int x2,int y2); void Output(); private: float distance; }; int main() { int d1,d2,d3,d4; point dis; cout << "请输入第一个点的坐标"<<endl; cin >> d1 >> d2; cout << "请输入第二点的坐标"<<endl; cin >> d3 >> d4; dis.Distance(d1,d2,d3,d4); dis.Output(); return 0; } void point::Distance(int x1,int y1,int x2,int y2) { float length; length=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); distance=length; } void point::Output()
{ cout << "两点距离是" << distance << endl; } 4-15 定义一个Circle类,计算圆的周长和面积。 答:程序如下 class circle { double rd;//半径成员 public: circle() { rd=0.0; }//构造函数 circle(double b) { rd=b; }//重构构造函数 double zc() { return 2*pi*rd; } double mj() { return pi*rd*rd; } }
{ public: Test(int n=1) {val=n;cout<<"Con."<<endl;} Test(const Test& t) {val=t.val;cout<<"Copy con."<<endl;} Test & operator=(Test &t) { val=t.val; cout<<"Assignment."<<endl; return *this; } private: int val; }; void fun1(Test t) {} Test fun2() { Test t; return t; } void main() { Test t1(1); Test t2=t1; Test t3; t3=t1; fun1(t2); t3=fun2(); } 答:运行结果为 Con. Copy con. Con. Assignment Copy con. Con. Copy con.
习题2
2-1 结构与联合有何区别? 答:联合是有别于以前任何一种数据类型的特殊数据类型,它是多个成 员的一个组合体,但与结构体不同,联合体的成员被分配在同一段内存 空间中,它们的开始地址相同,使得同一段内存由不同的变量共享。 2-2 struct和class区别是什么? 答:C++中,struct和class基本是一直的,唯一不同在于,struct中缺省权 限public,class缺省权限private,即在struct和class没有写public时, struct默认为public,class默认为private。 2-3 什么是内联函数?内联函数的优点是什么? 答:C++提供一种提高效率的方法,即变异时将调用函数的代码直接嵌 入到主函数中,而不是将流程转出去,这种嵌入到主函数的函数叫内联 函数。使用内联函数可以节省运行时间,提高函数的执行效率。
习题4
4-1 什么是类?什么是对象?对象和类是什么关系? 答:类(Class)实际上是对某种类类型的对对象定义变量和方法的原 型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象 编程的基础。一个类定义了一组对象。类具有行为,它描述一个对象能 够做什么以及做的方法。对象是具有类类型的变量。它们的关系是类是 对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对 象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义 包括在特定类型的对象中的方法和变量的软件模板 4-2 面向对象程序设计中类之间的关系主要有哪两种? 答;主要有is-a和has-a的关系 4-3一个类的各数据成员的构造顺序是什么?类的对象成员与类的一般 数据成员的构造顺序是什么?构造顺序与析构顺序的关系是什么? 答:按它们在类出现的先后顺序进行,先定义者先构造;先构造类的对 象成员,再构造一般数据成员;二者顺序相反,先构造者后析构。 4-4 复制构造函数的作用是什么? 答:复制构造函数是一种特殊的构造函数,具有一般构造函数的所有特 性。它创建一个新的 { printf(“catch try:2 int:%d\n”,i); } catch(double d) { printf(“catch try:2 double:%f\n”,d); } return 0; } 答:运行结果是 try:1 catch try:1 int:1 try:2 catch try:2 double:1.200000
cout<<oct<<i<<endl; //八进制 cout<<hex<<i<<endl; //十六进制 } 输出结果是 103707 87C7 3-4 写一个C++程序,使用cout输出提示信息,向用户询问一个矩形的长 和宽,都使用cin从键盘接收用户的输入信息,并输出矩形的周长和面 积。 答:程序如下: #include<iostream> using namespace std; void main() { int a,b,c,s; cout<<”输出矩形的长和宽“<<endl; cin>>a>>b; c=(a+b)*2; s=a*b; cout”<<“周长是“<<c<<”面积是”<<s<<endl; } 3-6 分析程序,写出运行结果 int main(void) { try { printf(“try:1\n”); throw 1; } catch(int i) { printf(“catch try:1 int:%d\n”,i); } catch(double d) { printf(“catdh try:1double %f\n”,d); } try { printf(“try:2\n”); throw 1.2;
4-7 分析程序,写出运行结果。 #include<iostream> using namespace std; class BC { public: BC() {sBC=new char[3];cout<<"BC allocates 3 bytes. in BC()\n";} ~BC() {delete [] sBC;cout<<"BC free 3 bytes. \n in ~BC()";} private: char * sBC; }; class DC:public BC { public: DC(){sDC=new char[5];cout<<"DC allocates 5 bytes. in DC()\n";} ~DC() {delete [] sDC;cout<<"DC free 5 bytes. in DC()\n";} private: char * sDC; }; int main() { DC d; cout<<"this is a test."<<endl; return 0; } 答:运行结果如下: BC allocates 3 bytes.in BC() DC allocates 5 bytes.in DC() this is a test DC free 5 bytes. in DC() BC free 3 bytes. in ~BC() 4-8 分析下列程序的输出结果 #include<iostream> using namespace std; class Test
相关文档
最新文档