1第1章面向对象的方法学1.什么是面向对象方法学?解:面向对象方法学就是尽量模拟人类习惯的思维方式,使软件开发的方法与过程尽可能接近人类认识世界、解决问题的方法与过程,从而使描述问题的问题空间(即问题域)与实现解法的解空间(即求解域)在结构上尽可能一致。2.什么是对象?它与传统的数据有何关系?有什么不同?解:对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体。它与传统数据有本质的不同,传统数据是被动地等待对它进行处理,对象是进行处理的主体。3.什么是封装性和继承性?解:封装是面向对象方法的一个重要特点,即将对象的属性和行为封装在对象的内部,形成一个独立的单位,并尽可能隐蔽对象的内部细节。继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。4.什么是多态性?解:多态性是面向对象方法的重要特征。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。5.试写出学生管理系统中所涉及的类(属性和方法)。学生管理系统中学生信息有:姓名、学号、年龄、成绩;学生管理系统完成学生信息输入、学生信息输出、插入学生信息、删除学生信息、查找学生信息。解:classStudent{private:charcName[12];//姓名longlNum;//学号intage;//年龄floatfGrade;//成绩public:voidInput();//输入学生信息voidPrint();//输出学生信息voidInsert();//插入学生信息voidDel();//删除学生信息voidFind();//查找学生信息};6.目前常用的面向对象程序设计语言有哪些?各有哪些特点?解:VisualC++6.0支持面向对象编程、可视化、模块化、代码可重用和组件共享等技术,可以大大提高软件系统的设计、管理和开发速度。Java语言是一种通用、并发、基于类的面向对象程序设计语言。Java语言具有简捷性、面向对象、分布式、健壮性、安全性、可移植性、解释型、高性能、多线程、动态性等特点。C#(读做“Csharp”)是微软公司发布的一种面向对象的、运行于.NETFramework之上的高级程序设计语言。C#集C语言的简洁强大、C++的面向对象、VB的图形化设计方法、Java的编译与执行机制等优点于一身。C#是创新性的新式编程语言,它巧妙地结合了最常用的行业语言和研究语言中的功能,并引入了多种潜在的新功能,提高了开发人员在语言构造方面的效率,将快速的应用程序开发与对底层平台各种功能的访问紧密结合在一起,使得程序员能够在.NET平台上快速开发各种应用程序。27.C++支持多态性主要表现在哪些方面?解:C++支持两种多态性,即编译时的多态性和运行时的多态性。编译时的多态性是通过重载来实现的,运行时的多态性是通过虚函数来实现的。思考题1.设计一个栈类,实现的操作有初始化栈、入栈、出栈、判栈空。解:classStack{private:inttop;ints[100];public:voidIni_Stack();//初始化栈voidPush_Stack();//入栈voidPop_Stack();//出栈voidEmpty();//判栈空};2.设计一个队列类,实现的操作有初始化队列、入队、出队、判队空。解:classQueue{private:intfront,rear;intque[100];public:voidIni_Queue();//初始化队列voidIn_Queue();//入队voidOut_Queue();//出队voidEmpty();//判队空};第2章类与对象1.构造函数和析构函数的主要作用是什么?解:构造函数的功能是在创建对象时,给数据成员赋初值,即对象的初始化。析构函数的功能是释放一个对象,在对象删除之前,用它来做一些内存释放等清理工作。2.什么是this指针?它的主要作用是什么?解:this指针称为自引用指针。每当对象调用成员函数时,系统就将该对象的地址赋给this指针,这时C++编译器将根据this指针所指向的对象来确定应该引用哪一个对象的数据成员。3.什么是友元函数?解:友元函数不是当前类中的成员函数,它可以是一个不属于任何一个类的一般函数(即非成员函数),也可以是另外一个类的成员函数。34.什么是静态数据成员?静态数据成员的定义和初始化方法是什么?解:类的静态数据成员拥有一块单独的存储区,不管用户创建了多少个该类的对象,所有这些对象的静态数据成员都共享这一块静态存储空间,是这些对象互相通信的一种方法。静态数据成员的定义格式:static类型名静态成员名;静态数据成员的初始化格式:类型类名∷静态数据成员=初始化值;5.关于构造函数的叙述正确的是(B)。A.构造函数可以有返回值B.构造函数的名字必须与类名完全相同C.构造函数必须带有参数D.构造函数必须定义,不能默认6.关于析构函数特征描述正确的是(C)。A.一个类中可以有多个析构函数B.析构函数名与类名完全相同C.析构函数不能指定返回类型D.析构函数可以有一个或多个参数7.构造函数是在(B)时被执行的。A.程序编译B.创建对象C.创建类D.程序装入内存8.定义A是一个类,那么执行语句“Aa,b(3),*p;”调用了(A)次构造函数。A.2B.3C.4D.59.在下列函数原型中,可以作为类Base析构函数的是(B)。A.void~BaseB.~Base()C.~Base()constD.Base()10.this指针是C++实现(B)的一种机制。A.抽象B.封装C.继承D.重载11.已知类中的一个成员函数说明为:voidSet(X&a)其中,X&a的含义是(C)。A.指向类X的指针为aB.将a的地址赋给变量C.a是类X的对象引用,用来作为Set()的形参D.变量X与a按位与作为函数Set()的形参12.下面关于友元函数的描述中,正确的说法是(A)。A.友元函数是独立于当前类的外部函数B.一个友元函数不能同时定义为两个类的友元函数C.友元函数必须在类的外部定义D.在外部定义友元函数时,必须加关键字friend13.一个类的友元函数能够访问该类的(D)。A.私有成员B.保护成员C.公有成员D.所有成员14.友元的作用之一是(A)。A.提高程序的运行效率B.加强类的封装性C.实现数据的隐藏性D.增强成员函数的种类15.n=1516.s=10思考题1.定义一个学生类,学生信息有学号、姓名和成绩。成绩包括计算机、英语、数学成绩和平均分。要求利用队列实现学生的入队、出队和显示等功能。constintMAXSIZE=5;//queue.hstructdatatype{longno;charname[10];4floatscore;};classStudent{private:datatypedata[MAXSIZE];intfront,rear;intnum;public:Student();intIn_SeQueue(datatypex);intOut_SeQueue();voidPrint_SeQueue();};//queue.cpp#includeiostreamusingnamespacestd;#includequeue.hint_tmain(intargc,_TCHAR*argv[]){Studentsq;inti;for(i=1;i=3;i++){datatypestu;coutinputno,name,scoreendl;cinstu.nostu.namestu.score;sq.In_SeQueue(stu);}coutPrint_SeQueueendl;sq.Print_SeQueue();sq.Out_SeQueue();coutAfterOut_SeQueueendl;sq.Print_SeQueue();return0;}Student::Student(){front=rear=MAXSIZE-1;num=0;}5intStudent::In_SeQueue(datatypex){if(num==MAXSIZE){return(-1);}else{rear=(rear+1)%MAXSIZE;data[rear]=x;num++;return(1);}}intStudent::Out_SeQueue(){if(num==0){return-1;}else{front=(front+1)%MAXSIZE;num--;return1;}}voidStudent::Print_SeQueue(){inti;intnumber=num;for(i=(front+1)%MAXSIZE;number0;number--,i=(i+1)%MAXSIZE)coutdata[i].nodata[i].namedata[i].scoreendl;}2.定义一个图书类,图书信息有图书名称、作者、出版社、价格。要求利用栈实现图书的入库、出库和显示等功能。constintMAXSIZE=5;//stack.hstructdatatype{charname[10],author[10],publish[20];floatprice;};6classStack{private:datatypedata[MAXSIZE];inttop;public:Stack();intPush_SeqStack(datatypex);intPop_SeqStack();voidPrint_SeqStack();};//stack.cpp#includeiostreamusingnamespacestd;#includestack.hint_tmain(intargc,_TCHAR*argv[]){Stacksq;inti;for(i=1;i=3;i++){datatypeb;coutinputname,author,publish,priceendl;cinb.nameb.authorb.publishb.price;sq.Push_SeqStack(b);}coutPrint_SeqStackendl;sq.Print_SeqStack();sq.Pop_SeqStack();coutAfterPopendl;sq.Print_SeqStack();return0;}Stack::Stack(){top=-1;}intStack::Push_SeqStack(datatypex){if(top==MAXSIZE-1){7return(0);}else{top++;data[top]=x;return(1);}}intStack::Pop_SeqStack(){if(top==-1){return0;}else{top--;return1;}}voidStack::Print_SeqStack(){inti;for(i=0;i=top;i++)coutdata[i].namedata[i].authordata[i].publishdata[i].priceendl;}3.有Distance类和Point类,将Distance类定义为Point类的友元类来实现计算两点之间距离。//point.hclassPoint{public:Point(intxx=0,intyy=0){X=xx;Y=yy;}friendclassDistance;8private:intX,Y;};classDistance{public:floatfDist(Pointa,Pointb);};//point.cpp#includeiostreamusingnamespacestd;#includemath.h#includepoint.hintmain(){Pointmyp1(1,1),myp2(4,5);Distanced;coutThedistanceis: