C++课后习习题解答_第1页
C++课后习习题解答_第2页
C++课后习习题解答_第3页
C++课后习习题解答_第4页
C++课后习习题解答_第5页
免费预览已结束,剩余6页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章 面向对象的方法学1什么是面向对象方法学解:面向对象方法学就是尽量模拟人类习惯的思维方式,使软件开发的方法与过程尽可能接近人类认识世界、解决问题的方法与过程,从而使描述问题的问题空间(即问题域)与实现解法的解空间(即求解域)在结构上尽可能一致。2什么是对象它与传统的数据有何关系有什么不同解:对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体。它与传统数据有本质的不同,传统数据是被动地等待对它进行处理,对象是进行处理的主体。3什么是封装性和继承性解:封装是面向对象方法的一个重要特点,即将对象的属性和行为封装在对象的内部,形成一个独立的单位,并尽可能隐蔽对象的内部细节。继承性是子类

2、自动共享父类数据结构和方法的机制,这是类之间的一种关系。4什么是多态性解:多态性是面向对象方法的重要特征。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。5试写出学生管理系统中所涉及的类(属性和方法)。学生管理系统中学生信息有:姓名、学号、年龄、成绩;学生管理系统完成学生信息输入、学生信息输出、插入学生信息、删除学生信息、查找学生信息。解:class Studentprivate: char cName12;ET Framework之上的高级程序设计语言。C#集C语言的简洁强大、C+的面向对象、VB的图形化设计方法、Java的编译与执行机制等优点于一身。C#是创新性的新式编程语

3、言,它巧妙地结合了最常用的行业语言和研究语言中的功能,并引入了多种潜在的新功能,提高了开发人员在语言构造方面的效率,将快速的应用程序开发与对底层平台各种功能的访问紧密结合在一起,使得程序员能够在.NET平台上快速开发各种应用程序。7C+支持多态性主要表现在哪些方面解:C+支持两种多态性,即编译时的多态性和运行时的多态性。编译时的多态性是通过重载来实现的,运行时的多态性是通过虚函数来实现的。思考题1设计一个栈类,实现的操作有初始化栈、入栈、出栈、判栈空。解:class Stackprivate: int top; int s100;public: void Ini_Stack(); 3o <

4、;<" "<< <<" "<<datai.score <<endl;2定义一个图书类,图书信息有图书名称、作者、出版社、价格。要求利用栈实现图书的入库、出库和显示等功能。const int MAXSIZE=5; ame<<" "<<datai.author<<" "<<datai.publish<<" "<<datai.price<<end

5、l;3有Distance类和Point类,将Distance类定义为Point类的友元类来实现计算两点之间距离。第5章 静态与命名控制1下列静态数据成员的特性中,错误的是( D )。 A说明静态数据成员时,前边要加关键字static B静态数据成员在类外进行初始化 C引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符 D静态数据成员不是所有对象所共有的2下列关于静态数据成员的叙述,错误的是( A )。 A静态数据成员在对象调用析构函数后,从内存中撤销 B即使没有实例化类,静态数据成员也可以通过类名进行访问 C类的静态数据成员是该类所有对象所共享 D类的静态数据成员需要

6、初始化3下列关于静态成员的叙述中,错误的是( B )。 A类的外部可以直接调用类的静态数据成员和静态成员函数 B与一般成员一样,只有通过对象才能访问类的静态成员 C类的静态数据成员不能在构造函数中初始化 D类的一般成员函数可以调用类的静态成员4声明类的成员为静态成员,必须在其前面加上关键字( B )。 AconstBstaticCpublicDvirtual 5静态成员为该类的所有( B )共享。 A成员B对象Cthis指针D友元6程序运行结果:1237程序运行结果:CStatic:val=10思考题1利用静态数据成员的概念,编写一个类,统计目前存在多少个该类的对象。class Aprivat

7、e:static int n;public:A()n+;void Print()cout<<n<<endl;int A:n=0;int main()A a1;();A a5,a2; ();return 0;2利用静态数据成员的概念,编写一个学生类,学生信息包括姓名、学号、成绩;统计学生的总人数及总成绩,并输出。#include "iostream"#include"iomanip"using namespace std;class Studentprivate:char *name;int stu_no;float score;s

8、tatic int total_num;static float total_score;public:Student(char *na,int no,float sco);void Print();int Student:total_num =0;float Student:total_score =0;int main()Student s1("张明",1,90);();Student s2("王兰",2,95);();Student s3("于敏",3,87);();return 0;Student:Student(char *

9、na,int no,float sco)name=new charstrlen(na)+1;strcpy(name,na);stu_no=no;score=sco;total_num+;total_score=total_score+score;void Student:Print() cout<<"第"<<total_num<<"个学生:"<<name<<setw(4)<<stu_no<<setw(4)<<score <<endl;cout<

10、;<"总人数是:"<<total_num<<endl;cout<<"总分数是:"<<total_score<<endl;3利用静态的概念,编写一个小猫类,统计并输出每个小猫的重量、小猫的总数量及总重量。class small_cat 态 绑定。在运行时确定函数调用称为 动态 绑定。2如果A是从B继承而来,则A叫 子 类,B叫 父 类。3在多重派生过程中,如果想使公共的基类在派生时只有一个副本,则可以将这个基类声明为 虚基类 。二、选择题1在类的继承与派生过程中,关于派生类不正确的说法是(

11、B )。 A派生类可以继承基类的所有特性B派生类只能继承基类的部分特性 C派生类可以重新定义已有的成员D派生类可以改变现有成员的属性2派生类对象对它的基类成员,(A )是可以访问的。 A公有继承的公有成员B公有继承的私有成员 C公有继承的保护成员D私有继承的共有成员3下列叙述中不正确的是( C )。 A含纯虚函数的类称为抽象类B不能直接由抽象类建立对象 C抽象类不能作为派生类的基类D纯虚函数没有其函数的实现部分4当定义派生类的对象时,调用构造函数的正确顺序是(A )。 A先调用基类的构造函数,再调用派生类的构造函数 B先调用派生类的构造函数,再调用基类的构造函数 C调用基类的构造函数和派生类的

12、构造函数的顺序无法确定 D调用基类的构造函数和派生类的构造函数是同时进行的5关于多重继承二义性的描述中,(D)是错误的。 A一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性 B解决二义性最常用的方法是对成员名的限定 C基类和派生类中出现同名函数,也存在二义性 D一个派生类是从两个基类派生而来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性6派生类的构造函数的成员初始化列表中,不能包含(C )。 A基类的构造函数B派生类的自对象的初始化 C基类的自对象的初始化D派生类的一般数据成员的初始化7下列关于protected成员说法,正确的是(

13、 A )。 A在派生类中仍然是protected的B具有private成员和public成员的双重角色 C在派生类中是private的D在派生类中是public的8下列关于虚函数的说法,正确的是(C )。 A虚函数是一个static类型的成员函数 B虚函数是一个非成员函数 C基类中采用virtual声明一个虚函数后,派生类中定义相同原型的函数时可以不加virtual声明 D派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数或类型9关于虚函数和抽象类描述中,( C )是错误的。 A纯虚函数是一种特殊的函数,它没有具体实现 B抽象类是指具有纯虚函数的类 C一个基类中声明有纯虚函数,则它的派

14、生类一定不再是抽象类 D抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出10下列程序,编译时出现错误的是( C )。 class A 1 B. 2 C. 3 D. 4三、简答题1简要定义如下术语:继承、虚函数、多重继承。答:继承性是自然界普遍存在的一种现象,是从先辈那里得到已有的特征和行为。类的继承就是新类从已有类那里获得已有的属性和行为,或者说是基类派生了具有基类特征又有新特征的派生类。虚函数需要在函数前面加virtual说明。通过虚函数可以达到动态绑定效果。在类的派生过程中,如果基类名有多个,则这种继承方式称为多继承,这时的派生类同时得到了多个已有类的特征。2分别说明什么是抽象基类什

15、么是虚基类当一个类中存在纯虚函数时,这个类就是抽象类。如把一个基类定义为虚基类,必须在派生子类时在父类的名字前加关键字virtual。第8章 模 板1类模板的使用实际上是将类模板实例化成为一个具体的( D )。 A类B对象C函数D模板类2关于类模板,下列表述中不正确的是( B )。 A用类模板定义一个对象时,不能省略实参 B类模板只能有虚拟类型参数 C类模板本身在编译中不会生成任何代码 D类模板的成员函数都是模板函数3类模板的模板参数( )。 A只可作为数据成员的类型 B只可作为成员的返回类型 C只可作为成员函数的参数类型 D以上三者皆是4一个( )允许用户为类定义一种模式,使得类中的某些数据

16、成员及某些成员函数的返回值能取任意类型。 A函数模板B模板函数C类模板D模板类5如果一个模板声明列出了多个参数,则每个参数之间必须使用逗号隔开,每个参数都须重复使用关键字( D )。 AconstBstaticCvoidDclass6假设类模板Employee存在一个static数据成员salary,由该类模板实例化3个模板类,那么存在( D )个static数据成员的副本。 A0B1C2D37程序运行结果:120思考题1编写一个使用类模板对数组进行排序、查找和求元素和的程序。const int SIZE=10; .输入链表"<<endl;cout<<&quo

17、t;2.输入链表"<<endl;cout<<"0.退出"<<endl;cout<<"请选择"<<endl;cin>>n;switch (n)case 1:head1=new Node<T>head1->next =0;CreateLinkList(head1);break;case 2:head2=new Node<T>head2->next =0;CreateLinkList(head2);while(n);template<cl

18、ass T>void LinkList<T>:Print_LinkList( )int n;doNode<T> *p;cout<<"1.输出链表"<<endl;cout<<"2.输出链表"<<endl;cout<<"3.输出合并后的链表"<<endl;cout<<"0.退出"<<endl;cout<<"请选择"<<endl;cin>>n

19、;switch (n)case 1:p=head1->next;break;case 2:p=head2->next;break;case 3:Merge();p=head3->next ;if (n)while(p)cout<<p->data <<" "p=p->next;cout<<endl;while(n);template<class T>void LinkList<T>:CreateLinkList(Node<T> *h)int flag=-1,num=0;Nod

20、e<T> *s,*r;r=h;T x;cout<<"please input a value(-1 end):"<<endl;cin>>x;while(x!=flag)s=new Node<T>s->data=x;r->next=s;r=s;cin>>x;if(r!=NULL) r->next=NULL;template<class T>void LinkList<T>:Merge()Node<T> *p1;Node<T> *s,*r;p

21、1=head1->next;T aMaxlen,bMaxlen,cMaxlen;int i,j,k,l,n1,n2;i=0;n1=0;n2=0;while(p1)ai=p1->data ;p1=p1->next ;i+;n1+;p1=head2->next ;i=0;while(p1)bi=p1->data ;p1=p1->next ;i+;n2+;i=n1-1;j=n2-1;k=0;while(i>=0 && j>=0)if(ai>bj)ck+=ai-;elseck+=bj-;if(i>=0)for(l=i;l>

22、;=0;l-)ck+=al;elsefor(l=j;l>=0;l-)ck+=bl;head3=new Node<T>head3->next =0;r=head3;for(i=0;i<k;i+)s=new Node<T>s->data=ci;r->next=s;r=s;if(r!=NULL) r->next=NULL;4用类模板实现栈,功能有:判断栈是否为空、入栈、出栈、读栈顶元素。const int MAXSIZE=100; 文件,它包含了所有输入/输出操作所需要的信息。2成员函数 setf()和unsetf() 被用来设置和恢复格式

23、状态标志。3要格式化流操纵元,必须包含头文件 。流插入操作符是 << ,流提取操作符是 >> 。4C+中,数据文件类型分为( C )。 A文本文件和顺序文件B顺序文件和随机文件 C文本文件和二进制文件D数据文件和文本文件5( A )是标准输入流。 AcinBcoutCcerrDclog6关于提取和插入运算符,下列说法不正确的是( A )。 A可以重载为类的成员函数 B应该重载为类的友元函数 C提取运算符是从输入字符序列中提取数据 D插入运算符是把输出数据插入到输出字符序列中7选择下面程序的运行结果( D )。#include<>void main() int

24、 i=100; (ios:hex); cout<<i<<"t" cout<<i<<"t" (ios:dec); cout<<i<<endl; A64 100 64 B64 64 64 C64 64 100 D64 100 1008判断正误,如果不正确,说明原因。(1) 带有long型参数的流成员函数flags( )用于根据参数设置标志状态,并返回原来的设置。(正确)(2) 流插入操作符<<和流读取操作符>> 被重载以处理所有的标准数据包括字符和内存地址(仅对流插入)和全部用户自定义类型,而且可以作为成员函数定义。(不正确)9下面程序运行后,数据文件保存的结果是(1 3 5 7 9 )。#include <iostream>#include <f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论