收藏 分销(赏)

南开大学复习资料-面向对象程序设计10001.docx

上传人:二*** 文档编号:4516445 上传时间:2024-09-26 格式:DOCX 页数:24 大小:59.71KB
下载 相关 举报
南开大学复习资料-面向对象程序设计10001.docx_第1页
第1页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、面向对象程序设计课程期末复习资料一、客观部分:(单项选择、多项选择、不定项选择、判断)(一)、选择部分1、面向对象方法的基本观点是一切系统都是由(C )构成的。A、结构B、模块C、对象D、类2、下列关于主函数的叙述中正确的是(B )。A、一个程序可以有多个主函数B、程序从主函数开始执行C、一个程序可以没有主函数D、主函数是一个特殊的函数,因此其结构与其他函数不同3、有关带默认参数的函数的描述正确的是(D )。A、只能在函数定义时设置默认参数值B、只能在函数声明时设置默认参数值C、函数调用时,必须使用默认的参数值,不能给出新的实参值D、设置默认参数时,应该设置最右边的若干个参数的默认值4、有关重

2、载函数的描述正确的是(C )。A、函数名相同的函数就是重裁函数B、函数名相同但返回值类型不同的函数就是重载函数C、函数名相同但参数个数或类型不同的函数就是重载函数D、函数功能相同的函数就是重载函数5、假设堆内存分配均成功,则下面程序段完全正确的是(A )oA、int *p=new int(3) ;cout*p;delete p;B、int *p=new int5 = (l, 2, 3, 4, 5 ;for(int i=0; i5; i+)coutpi jdelcte p;C、int *p=new int 5 ;for(int i=0; iWho();p=&obj2;p-Who();p=&obj

3、3;p-Who();obj2.Who();obj3.Who(); return 0;参考答案:class Baseclass Baseclass Baseclass Derivedlclass Derived26、写出下面程序的运行结果。 #inckide using namespace std;class Shape(public:void Draw()coutShapeendl;Ivirtual void Prinl()=0;;class Circle:public Shapeprivate:double r;public:void Draw()coutCircleendl;void Se

4、tData(double radius)r=radius;void Print()cou(area:3.14*r*rendl;;class Rectangle:public Shapeprivate:double a,b;public:void Draw()coutRectangleendl;1void SetData(doublc x,double y)a=x,b=y;void Print()(cout,area:a*bendl;1;int main()Circle c;Rectangle r;Shape *spl=&c;Shape &sp2=r;c.SetData(IO);r.SetDat

5、a(3,5);spl-Draw();c.Piint();sp2.Draw();r.Print();return 0;参考答案:Shapearea:314Shapearea:157、写出下面程序的运行结果。#include using namespace std;class Sample;Sample opcrator-(Samplc &,Samplc &);Sample operator+(Sample &,Sample &); class Sample(public:Samplc()Sample(int i)n=i;friend Sample operator-(Sample &,Sampl

6、e &); friend Sample opcrator+(Sample &,Sample &); void disp()coutn=nendl; private:int n;;Sample opcrator-(Saniple &sl,Sample &s2)(int m=sl .n-s2.n;return Sample(iTi);Sample operator+(Sample &sl,Sample &s2)(int m=sl .n+s2.n;return Sample(m);)int main()Sample s 1 (10),s2(20),s3;s3=s2-sl;s3.disp();s3=s

7、2+sl;s3.disp();return 0;参考答案:n=10n=308、写出下面程序的运行结果。#include using namespace std;class Sample public:Sample(int i)n=i;void opcrator+=(int i)(n+=i; void operator-=(int i)(n-=i;void disp() coutn=ncndl:private:int n;;int inain()(Sample A(2),B(2);A+=l;B-=l;A. dispO;B. dispO;return 0;参考答案:n=3n=l9、写出下面程序的运

8、行结果。#include #includc using namespace std;int main。(ofstream fllel; filcl.opcn(fl.datu); filell23endl; filel63.78;filel.close();ifstream file2(f 1 .dat);int i, j;file2ij;cout,i+j=i+jendl; file2.close();return 0;参考答案:i+j=18610、写出下面程序的运行结果。#include using namespace std;template class addTx, y;public:ad

9、d(T a, T b)x=a;y=b;IT add 1() return x+y; ;int main()(add A(65, 120);add B(13.6, 22.9);coutsl =A.addl ()endl;cout,s2=,B .add 1 ()endl;return 0;参考答案:sl=185s2=36. 511、swap(涵数利用引用作为参数实现两个变量的交换,将程序填写完整。#includc using namespace std;void swaD(int &x, int &、)(int temp;temp=x;y=temp;int main()(int a,b;cinab

10、;swaD(a, b):couta, bendl; return 0;考核知识点:C+与C的主要差异-函数的引用调用参见讲稿章节:1-1612、下面的程序定义了两个类,一个是TennisClub,其成员数据有俱乐部和会员 名,另一个是Person,其成员数据有姓名和年龄,类TennisClub的成员函数visit 可以显示姓名、年龄、俱乐部名、会员名。将程序填写完整。#include #include using namespace std;class Person;class TennisClub(public:TennisClub(char 华char *q)strcpy(club,p);

11、strcpy(name,q);void visit(Person);private:char club24;char name24;;class Person(public:Person(char *p.int y)strcpy(namc,p);age=y;friend void TennisClub:visit(Person x);private:char namc24;ini age;;void TennisClub:visit(Person x)(cout姓名:x.nameendl;cout,r 年龄:x.ageendl;coutH可以使用的俱乐部:clubendl;cout介绍人:na

12、meendl;int main()(TennisClub a(”明星俱乐部”,”李晓明,Person b(”张静”,28);a.visit(b);return 0;考核知识点:类的定义、类的友元参见讲稿章节:2-03. 2-1613、请将下面程序补充完整。#include using namespace std;class Student;class Teacher(public:void setScore(Student& s,double sc);void setHour(Studcnt& s,int h);private:long number;charname 101; ;class

13、Studentpublic:friend class Teacher;double getScorc() return score; int getHour() ( return semeHour; private:long number;char name I0J;double score;int semeHour;;void Teacher:setScore(Student& s,double sc) s.score=sc; 可以直接访问Student的私有数据成员void Teacher:se(Hour(Student& s,int h) s.semeHour=h; /可以直接访问Stu

14、dent的私有数据成员int niain() Teacher I;Student s;t.setScore(s,98.5);t.selHour(s,5);couts.gctScorc() s.gctHour()cndl;return 0;考核知识点:类的友元参见讲稿章节:2-1614、请补充完整下面类说明中的拷贝构造函数。class MyClass(public:int *p;int size;MyClass(int n):size(n),p(new intn)MyClass() delete p;MyClass(MyClass& me): sizc(mc.size)D = new intls

15、ize;fbr(int i=0;isize;i+)= mc.Di;;考核知识点:拷贝构造函数、类的常量成员参见讲稿章节:2-10. 2-1215、将下列程序填写完整。#include using namespace std;class Point(public:Point(double aJouble b.double c) X=a;Y=b;Z=c; double Getx()return X;double Gety() return Y;double Getz()( return Z;private:double X.Y;protected:double Z;;class Line : pu

16、blic Point(public:Line(double a ,double bJouble c,double d):Point(a,b.,c) K=d; void show()coutGetx()endl;coutGcty ()cndl;coutGetz() Zendl;cou(Kendl;Iprivate:double K:;int main()(Line obj( 1.2,3.4,5.6,7.8);obj.show();return 0:J考核知识点:派生类构造函数和析构函数、函数重定义和派生类的继承方式 参见讲稿章节:3-03. 3-0516、将下列程序填写完整。#includc u

17、sing namespace std;class Furniture(public:void SetWeight(int i) m_weight=i; )int GetWeight()( return m_weight; void Move(int i)( coulMove i,m.endl; protected:int m_weight;;class Bed : virtual public Furniturepublic:void Sleep() cout Sleeping.n; ;class Sofa : virtual public Furniture(public:void Watc

18、hTV() cout Watching TV.ii; ;class SofaBcd : public Bed, public Sofa(public:void FoldOut() cout Fold out the sofa.n; ;int inain()(SofaBed ss:ss.SetWeight(2O);cout ss.GetWeight() endl;ss.Movc(l);ss.Sleep();ss.WatchTVf);return 0;考核知识点:虚拟继承和虚基类参见讲稿章节:3-0817、下面的程序将一个普通函数作为类的友元函数,求坐标点之和,并且程序输 出结果为2,2,4,请将

19、程序补充完整。#include using namespace std;class Point(int X,Y;public:Point(int x=0, int v=0) X=x; Y=y; Countp+; Point(Point &p) X=p.X; Y=p.Y; Countp+; Point() Countp-; friend Point myfun(Point pl, Point p2. Point b3);static int Countp;void display()coutX,;,Y,V,;;Point myfun(Point pl. Point p2. Point p3)Po

20、int tmp(pl.X+p2.X+p3.X, pl.Y+p2.Y+p3.Y);return tmi);int Point:Countu = 0;int main()(Point ppO,ppI(I,2),pp2(l);Point p二myfun(pp(),ppl,pp2);p.display ();coutvvD.CountD 或 Point:CountDVVendl:输出 Counlp 的值7、己知“int a=10, b=8; int &r=a; r=b;coutaz,,,b/, z,r; 则输出 为(D )。A、10, 8, 10 B、10, 8,8 C、8,8, 10 D、8,8,8

21、8、己知 wint a=10, *p; int *&r=p; r=&a;*p=20;couta; w,则输出为(B )。A、10B、20C、不确定值 D、程序有错误9、下列关于类和对象的叙述中,错误的是(A )。A、一个类只能有一个对象B、对象是类的具体实例C、类是某一类对象的抽象D、类和对象的关系是一种数据类型与变量的关系10、有如下类声明:class Sample int x; ;则Sample类成员x是Sample类的(C )。A、公有数据成员B、保护数据成员C、私有数据成员D、以上选项都不正确11、C+中,关于构造函数和析构函数,正确的描述是(C )oA、在定义类时,必须自定义构造函数

22、和析构函数,在创建对象时自动调用构造 函数,在释放对象时自动调用析构函数B、构造函数和析构函数均可以重载C、已知类Student以及Student *p;在使用p=new Student;时自动调用无参构造函数创建动态对象,在delelte p;时自动调用析构函数释放动态对象D、构造函数和析构函数都可以成为虚函数12、在类的定义中,用于对类的数据成员进行初始化并执行其他内部管理操作的 函数是(C )。A、友元函数B、虚函数 C、构造函数 D、析构函数13、对于拷贝构造函数,正确的描述是(A )。A、在C+语言中,如果不自定义类的拷贝构造函数,则每个类都有默认的拷贝 构造函数B、必须为每个类定义

23、拷贝构造函数C、如果要使用拷贝构造函数,则必须在类中先定义D、当定义了类的构造函数时,如果要使用拷贝构造函数,则必须定义拷贝构造 函数return 0;考核知识点:类的静态数据成员、类的友元参见讲稿章节:2-13、2-1618、ARRAY类的定义如下,构造函数把参数n的值赋给s,给v动态分配长度 为n的数组空间,然后利用数组参数a初始化v所指向的数组。请将类定义补充 完整。class ARRAY(ini *v;int s;public:ARR/Y( int a, int n );ARRAY() delete lv: int size() return s; int& operator!(int

24、 i);;ARRAY:ARRAY(int a, int n)(if( n=0) v=NULL; s=0; return; s=n;v=new intfsl;fbr(int i=0; in; i+)vi=ai;int& ARRAY:operatorl(int i)(return vi;考核知识点:赋值运算符和下标运算符重载程序实例参见讲稿章节:2-2219、下面程序的功能是将文本文件readme.txt中的内容读出并显示在屏幕上,请 将程序补充完整。#include #include #include using namespace std;int main()char str(801;ifst

25、ream meCreadrne.txt);if(!nie)COUIVV文件打开失败! ”endl; abort();while (Ime.eofQ)me.getline(str, 80);coutstrendl;Ime.closeO:return 0;)考核知识点:输入输出流的getline函数 参见讲稿章节:4-07#include #include using namespace std;int main()(20、卜而程序的功能是:在文件f7txt的尾部写入一个字符串,请将程序补充完char ch(l=The end;ofstream outstr(f7.txt ios:app); fo

26、r(int i=0; istrlen(ch); i+) outstr.put(chi);outstr.closc();return 0;考核知识点:输入输出流对象 参见讲稿章节:4-02using namespace std; int main()21、下面程序的功能是:#includc #include #include 统计文件f7.txt中的字符个数,请将程序补充完整。(stream file;filc.opcn(f7.txt, ios:in);coutCan not open f7.txtendl;abort();Ichar ch;int i=();while (!file.eof()

27、filc.gct(ch);i+;cout,Characters: iendl;file.closeO;return 0;考核知识点:输入输出流的get函数参见讲稿章节:4-0622、下面的程序将一个己有文件的内容复制到另一个文件中。请将程序补充完整。#include#include#includeusing namespace std;int main()(fstream infile, cutfile;infile.open(c:filel.txt,ios:in);if (Jinfile)coutufllel .txt cant openAn;abort();1outfile.open(,c

28、:file2.txtios:out);if(!outfile)coutfilc2.txt cant opcnAn;abort();(char str80=,0;while(!infile.eof()infile.read(str.sizeof(str);outnie.write(str, sizeof(str);coutstr;Icoutcndl;infile.close();outrilc.close。:return 0;考核知识点:输入输出流的write函数参见讲稿章节:4-0823、下面的程序是一个类模板,可实现求三个变量的和,请将程序补充完整。#include using namesp

29、ace std;template vclass Tvi)eclass ff(Type al, a2, a3;public:ff(T、De bl. Type b2. Type b3)( a1=b1;a2=b2;a3=b3; Type sum() return ai+a2+a3; ;ini main()ff x(12,13,14), y(16,17,18);coutx.sum(), ,y.sum()endl;return 0;考核知识点:类模板的定义参见讲稿章节:5-03参考答案:24、编写一个计算长方形面积的程序。设长和宽为整数,其值由键盘输入,计算 结果显示在屏幕上。考核知识点:C+源程序的组

30、成参见讲稿章节:1-07参考答案:#include using namespace std;int CoinputeRectangleArea(int nL, int nW)int nA = nL * nW; return nA;int main()(int nWidth, nLength, nArea;coutvv”请输入长方形的长度和宽度(长宽都为整数): cinnLengthnWidth;nArea = ComputcRcctangleArea(nLcngth, nWidth); cout长方形的面积为:vvnAreavvendl;return 0;I例如:例如:25、编写简单计算器程序

31、,使它能够进行四则运算。输入:3+9输出:3+9=12考核知识点:C+源程序的组成参见讲稿章节:1-07参考答案:#include using namespace std;int main()(double dA, dB, dR;char cC;coutvv”请输入四则运算式:”; cindAcCdB; / 3.5+9.3 switch (cC)case +:dR = dA + dB;break;casedR = dA - dB;break;casedR = dA * dB;break;case 7:dR = dA / dB:break;default:cou(输入四则运算式的格式不正确! u

32、endl; return 0;Icoutvv”运算结果为:,dAcCdB=,dRendl;return 0;26、编写程序,将一个十进制正整数按倒序形式输出。例如:输入123,则输出3210考核知识点:C+源程序的组成参见讲稿章节:1-07参考答案:#include using namespace std;int main()(int nlnput, nS, nY, nR = 0;coutvv”请输入一个十进制的正整数:”;cinnlnput;nS = nlnput;while (nS != 0)nY = nS % 10;nR = nR*10+nY;nS = nS / 10;1coutvv”其

33、倒序形式为:nRendl;return 0;27、编写程序,求20以内的勾股数。例如:32+42=52, 3、4、5是勾股数。考核知识点:C+源程序的组成参见讲稿章节:1-07参考答案:#includc using namespace sld;int main()(int nA, nB, nC;/ nAA2+nBA2=nCA2for (nC = 1; nC = 20; nC+)for (nB = 1; nB nC; nB+) for (nA = 1; nA = nB; nA+)(if (nA*nA+nB*nB = nC*nC)coutnA ,nB HnCendl;IIreturn 0;28、编

34、写display函数,其功能为:当传入一个字符串参数时,则将该字符串输 出到屏幕上;当不传入任何参数时,则输出“noname”。例如:执行“display(”Li Xiaoming”);”后,在屏幕上输出Li Xiaoming”。执行display。后,在屏幕上输出“nonamc”。考核知识点:C+与C的主要差异-带默认形参值的函数、C+与C的主要差异-函数重载参见讲稿章节:1-11. 1-12参考答案:以默认形参方式实现:#include using namespace std;void Display(char *s = noname)coutsendl;int main()(Displa

35、yCLi Xiaoming);DisplayO;return 0;以函数重载方式实现:#include using namespace std;void Display(char *s);void DisplayO;int main()DisplayCLi Xiaorning);DisplayO;return 0;void Display(char *s)(coutscndl;Ivoid DisplayOcoutnonameendl;I29、编写程序,定义两个重载函数,分别求平面中两个整数(int)坐标点间的距 离和两个实数(float)坐标点间的距离,其计算结果都为实数。考核知识点:C+与C

36、的主要差异-函数重载参见讲稿章节:1-12参考答案:#include #include using namespace std;double ComputeDistance(int nXl, int nYl. int nX2, int nY2)(double dR:dR = sqrt(double)(nX 1 -nX2)*(nX I-nX2)+(nY l-nY2)*(nY 1 -nY2); coutndouble CompuleDistance(int nXl, int nYl, int nX2, int nY2)函数被调用! endl; return dR;Idouble ComputeDi

37、stance(float fXl, float fYl, float fX2, float fY2)(double dR:dR = sqrt(fX 1 -fX2)*(fX 1 -fX2)+(fY 1 -fY2)*(fY 1 -fY2);coutndouble ComputeDislance(float fXl, float fYl, float 1X2, float fY2)函数被调用! endl;return dR;int main()coutComputcDistancc( 1, 2, 3, 4)cndi;coutCompuleDislance( 1.5f, 2.5f, 3.5f, 4.6

38、f)endl; return 0;3()、编写程序,定义两个重载函数GetMax,分别求两个整数的最大值和一个整 型数组中各元素的最大值。例如:coutgetMax(3, 4); /输出 4int a = 5, 15, 10, -6, 7);输出数组a中的最大值15coutgetMax(a, sizeof(a)/sizeof(int);考核知识点:C+与C的主要差异-函数重载参见讲稿章节:1-12参考答案:#include using namespace std;int GetMax(int nA, int nB);int GetMax(int nArray, int nSize);int n

39、iain()(int nA = 5, 10, -6, 7, 25, 15;coutGetMax(3,4)endl;coutGetMax(nA, sizeof(nA)/sizeof(nA0)endl;return 0;int GctMax(int nA, int nB)(coutint GetMax(int nA, int nB)函数被调用! endl;return nA nB ? nA : nB;int GetMax(int nArray, int nSize)int nMax = nArray0, nl;for (nl = 1; nl nSize; nl+)if (nMax nArrayfn

40、ll)nMax = n Array nl;coutint GetMax(int nArray, int nSize)函数被调用! endl;return nMax;31、编写程序,从键盘输入学生的数量,根据学生数量为其动态分配内存空间, 并从键盘输入每一名学生的学号、姓名和3科成绩。计算并输出每一名学生的学 号、姓名和总成绩。(提示:定义一个学生结构体)考核知识点:C廿与C的主要差异-动态内存分配和释放参见讲稿章节:1-13参考答案:#include using namespace std;struct STU(charsNo9J; /用于存储学生学号(假设学生学号为位)char sNamef

41、lOl; /用于存储学生姓名int nScorcl3J; /用于存储学生三门课程的成绩;int main()(STU *pStu = NULL; /表示指向一-片无效内存int nStuNum, nl, nJ, nTotal;coutvv”请输入学生数量:”;cinnStuNum;if (nStuNum = 0)couivv学生数量必须大于! vvendl;return 0;1pStu = new STUnStuNum;if(pStu = NULL)coutM内存分配失败! vvendl;return 0;Ifor (nl = 0; nl nStuNum; nl+)coutiW输入第”nl+l

42、v”名学生的学号、姓名和三科成绩:”;cinpStunI|.sNopStunI.sName;for (nJ = 0; nJ 3; nJ+)cinpStulnl.nScorcnJJ;for (nl = 0; nl nStuNum; nl+)nTotal = 0;for (nJ = 0; nJ 3; nJ+)nTotal += pStunI.nScorenJ;cout第”vnl+lvv”名学生的学号、姓名和总成绩为:”;14、有关静态成员的描述错误的是(D )。A、某个类的静态数据成员由该类的所有对象所共享B、类的公有静态数据成员既可以用类的对象访问,也可以直接用作用域运算符“:”通过类名来访问C

43、、静态数据成员既可以是私有成员,也可以是公有成员D、类中一旦定义了静态数据成员,就必须定义静态成员函数,以便对静态数据 成员进行操作15、如果类A被说明成类B的友元,则(B )。A、类A的成员函数不得访问类B的所有成员B、类A的成员函数可以访问类B的所有成员C、类A的成员即类B的成员D、类B的成员即类A的成员16、下列关于this指针的说法,正确的是(D )oA、this指针一定指向常量型数据B、this指向的数据不可更改C、静态成员函数中也可以访问this指针D、this指针本身可直接作为成员函数的返回值17、派生类中的成员不能访问基类中的(A )oA、私有成员 B、公有成员 C、保护成员D、以上都可以18、基类的(B )在私有继承时在派生类中为私有成员函数,在公有和保护 继承时在派生类中为保护成员函数。A、私有成员函数B、保护成员函数C、公有成员D、保护数据成员19、类型兼容是指在基类对象可以出现的地方,都可以使用公有派生类的对象, 己知:class BaseClass( /;class Derive

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服