程序设计实习第二十一讲习题课.ppt

上传人:牧羊曲112 文档编号:6393171 上传时间:2023-10-26 格式:PPT 页数:57 大小:395.32KB
返回 下载 相关 举报
程序设计实习第二十一讲习题课.ppt_第1页
第1页 / 共57页
程序设计实习第二十一讲习题课.ppt_第2页
第2页 / 共57页
程序设计实习第二十一讲习题课.ppt_第3页
第3页 / 共57页
程序设计实习第二十一讲习题课.ppt_第4页
第4页 / 共57页
程序设计实习第二十一讲习题课.ppt_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《程序设计实习第二十一讲习题课.ppt》由会员分享,可在线阅读,更多相关《程序设计实习第二十一讲习题课.ppt(57页珍藏版)》请在三一办公上搜索。

1、程序设计实习第二十一讲 习题课,类和对象基本概念(1),写出下面程序的运行结果 class Apple private:static int nTotalNumber;public:Apple()nTotalNumber+;Apple()nTotalNumber-;static void PrintTotal()cout nTotalNumber endl;int Apple:nTotalNumber=0;Apple Fun(const Apple,解析:return返回时,产生临时变量,Total Number析构时会减小 41,类和对象基本概念(2),*写出下面程序的运行结果 class

2、Samplepublic:int v;Sample();Sample(int n):v(n);Sample(Sample,解析:构造函数和复制构造函数的调用9225注意区分:Sample b=a;d=a;,类和对象基本概念(3),程序输出结果如下,请填空05class A public:int val;A(_)val=n;_ GetObj()return _;main()A a;cout a.val endl;a.GetObj()=5;cout a.val endl;,A(int n=0)A,类和对象基本概念(4),程序输出结果如下,请填空3+4i 5+6i补足Complex类的成员函数,不能

3、增加成员变量class Complex private:double r,i;public:void Print()cout r+i i endl;int main()Complex a;a=3+4i;a.Print();a=5+6i;a.Print();,类和对象基本概念(4),构造函数Complex();Complex(const char t)if(!t)r=0.0;i=0.0;else r=t0-0;i=t2-0;,另一种思路重载赋值操作符Complex,类和对象基本概念(5),程序输出结果如下,请填空10补足Sample类的成员函数,不能增加成员变量class Samplepubli

4、c:int v;Sample(int n):v(n);main()Sample a(5);Sample b=a;cout b.v;,Sample(Sample,类和对象基本概念(6),程序输出结果如下,请填空ThisHello补足MyString类的成员函数,不能增加成员变量class MyStringchar*p;public:MyString(char*s)p=new charstrlen(s)+1;strcpy(p,s);MyString()delete p;const char*c_str()return p;,main()MyString s1(This),s2=s1;s2.Copy

5、(Hello);cout s1.c_str()endl s2.c_str();,类和对象基本概念(6),补足成员函数void Copy(char*s)delete p;p=new charstrlen(s)+1;strcpy(p,s);MyString(MyString,类和对象基本概念(7),程序输出结果如下,请填空5,55,5class Base public:int k;Base(int n):k(n);class Bigpublic:int v;Base b;Big _ Big _;,main()Big a1(5);Big a2=a1;cout a1.v,a1.b.k endl;cou

6、t a2.v,a2.b.k endl;,Big(int n):v(n),b(n)Big(Big&x):v(x.v),b(x.b.k),运算符重载(1),程序输出结果如下,请填空4,1请写出被隐藏的部分,MyInt的成员函数里不允许使用静态变量class MyIntint nVal;public:MyInt(int n)nVal=n;int ReturnVal()return nVal;.;,main()MyInt objInt(10);objInt-2-1-3;cout objInt.ReturnVal();cout,;objInt-2-1;cout objInt.ReturnVal();,M

7、yInt,运算符重载(2),*程序输出结果如下,请填空(4,5)(7,8)class Point private:int x;int y;public:Point(int x_,int y_):x(x_),y(y_);_;_ operator(_,const Point,main()cout Point(4,5)Point(7,8);,运算符重载(2),class Point private:int x;int y;public:Point(int x_,int y_):x(x_),y(y_);_;_ operator(_,const Point,friend ostream,ostream&

8、operator(ostream&o,const Point&p),o(p.x,p.y)endl;,o,运算符重载(3),*程序输出结果如下,写一个二维数组类 Array20,1,2,3,4,5,6,7,8,9,10,11next0,1,2,3,4,5,6,7,8,9,10,11,运算符重载(3),using std:cout;using std:endl;int main()Array2 a(3,4);int i,j;for(i=0;i 3;i+)for(j=0;j 4;j+)aij=i*4+j;for(i=0;i 3;i+)for(j=0;j 4;j+)cout a(i,j),;cout

9、endl;,cout next endl;Array2 b;b=a;for(i=0;i 3;i+)for(j=0;j 4;j+)cout bij,;cout endl;return 0;,运算符重载(3),class Array2 private:int*p;int r,c;public:Array2()p=NULL;Array2(int r_,int c_):r(r_),c(c_)p=new int r*c;Array2(Array2,Array2,注:重载的实际上是第二维的,第一维的直接调用int型一维数组的定义,运算符重载(3):第二种解法,class CWordArrprivate:i

10、nt*m_pdat;long m_size;public:CWordArr(long size)m_pdat=new intsize;m_size=size;CWordArr()delete m_pdat;int,运算符重载(3):第二种解法,class Array2private:CWordArr*m_p;long m_col,m_row;public:Array2(long col,long row)m_p=new CWordArr*col;for(long i=0;icol;i+)m_pi=new CWordArr(row);m_col=col;m_row=row;,Array2()fo

11、r(long i=0;im_col;i+)delete m_pi;m_pi=NULL;delete m_p;CWordArr,通过两次重载的叠加,就可以用axy的方式来访问数组元素C+不可能在一个类里面实现的重载(若这种相当于三元算符),因此有两个类:一个是一维数组类,实现的重载;另一个类是二维数组类,必须持有一组一维数组类的实例,存放二维数组的各个行的数组,二维数组类也要重载运算符,运算符重载(4),程序输出结果如下,写一个HugeInt类 3)100004)100005)100016)10006,运算符重载(4),void main()CHugeInt d(9999);cout 1)tem

12、p endl;cout 2)temp2 endl;cout 3)+d endl;cout 4)d+endl;cout 5)d endl;d+=5;cout 6)d endl;cout 7)d+temp;,运算符重载(4),代码过多,只截取部分,/重载运算符+CHugeInt operator+(const CHugeInt,const CHugeInt,运算符重载(4),friend ostream,继承和多态(1),程序输出结果如下,写一个Mystring类1.abcd-efgh-abcd-2.abcd-3.4.abcd-efgh-5.efgh-6.c7.abcd-8.ijAl-9.ijAl

13、-mnop10.qrst-abcd-11.abcd-qrst-abcd-uvw xyz,aboutbigmetakeabcdqrst-abcd-,Mystring类(1),#include#includeusing namespace std;class MyStringpublic:char*p;MyString()/构造函数 p=NULL;MyString(char*t)/构造函数 p=new charstrlen(t)+1;strcpy(p,t);MyString(const MyString,Mystring类(2),MyString()/析构函数 if(p)deletep;MyStr

14、ing operator+(const MyString,Mystring类(3),MyString operator+(const char*s)/+号重载,这里表示/MyString类型+字符串的情形 char*q;q=new charstrlen(p)+strlen(s)+1;strcpy(q,p);strcat(q,s);MyString temp(q);delete q;return temp;MyString 0,Mystring类(4),char,Mystring类(5),MyString operator()(int i,int n)/()重载 char*q;q=new cha

15、rn+1;strncpy(q,p+i,n);qn=0;MyString temp(q);delete q;return temp;ostream,Mystring类(6),int operator 号的重载 if(strcmp(s1.p,s2.p)(const MyString,Mystring类(7),int CompareString(const void*e1,const void*e2)/字符串比较函数 MyString*s1=(MyString*)e1;MyString*s2=(MyString*)e2;if(*s1*s2)return 0;else return 1;,Mystri

16、ng类(8),从string类派生的写法class MyString:public stringpublic:MyString():string();MyString(const char*s):string(s);MyString(const string,继承和多态(2),写出下面程序的运行结果,class B private:int nBVal;public:void Print()cout nBVal=nBVal endl;void Fun()cout B:Fun endl;B(int n)nBVal=n;,class D:public B private:int nDVal;publ

17、ic:void Print()B:Print();cout nDVal=nDVal endl;D(int n):B(3*n)nDVal=n;void Fun()cout D:Fun endl;,继承和多态(2),main()B*pb;D*pd;D d(4);d.Fun();pb=new B(2);pd=new D(8);pb-Fun();pd-Fun();pb-Print();pd-Print();pb=,D:FunB:FunD:FunnBVal=2nBVal=24nDVal=8B:FunnBVal=12,继承和多态(3),程序输出结果如下,请填空A:FunA:DoA:FunC:Do,clas

18、s A private:int nVal;public:void Fun()cout A:Fun endl;virtual void Do()cout A:Do endl;,class B:public A public:virtual void Do()cout B:Do endl;class C:public B public:void Do()cout C:Doendl;void Fun()cout C:Fun endl;,继承和多态(3),void Call(_)p-Fun();p-Do();main()Call(new A();Call(new C();,A*p,void Call(

19、_)p.Fun();p.Do();main()Call(A();Call(C();,A&p,模板(1),*设计CLinkList类模板中AppendNode 和PrintList成员函数,得到如下结果0,1,2,3,0,1,2,3,9,10,11,注意:1)不得调用任何库函数,库模板,不得使用static关键字,不得使用除 NULL 以外的任何常量2)不得为Node和CLinkList模板添加任何成员3)不得添加任何全局变量,不得添加其他函数,模板(1),template class Node public:D data;Node*next;templateclass CLinkList pr

20、ivate:Node*pHead;public:CLinkList();void AppendNode(D data);void PrintList();,templateCLinkList:CLinkList()pHead=new Node;pHead-next=NULL;main()CLinkList l;for(int i=0;i 4;i+)l.AppendNode(i);l.PrintList();cout endl;for(i=9;i 12;i+)l.AppendNode(i);l.PrintList();,模板(1),templatevoid CLinkList:AppendNod

21、e(D data)Node*p=pHead;while(p-next)p=p-next;p-next=new Node;p=p-next;p-data=data;p-next=NULL;,templatevoid CLinkList:PrintList()Node*p=pHead;while(p-next)cout next-data next;,模板(2),填空使程序能编译通过,并写出运行的输出结果,#include template class myclass T i;public:myclass(T a)i=a;void show()cout obj(This);obj.show();,

22、class T,char*,该程序输出结果为:_,This,模板(2),填空得到以下结果TomHanks 注意,不允许使用任何常量,template class myclass _;int nSize;public:myclass(_,int n)p=new Tn;for(int i=0;i n;i+)pi=ai;nSize=n;,myclass()delete p;void Show()for(int i=0;i obj(_ _);obj.Show();,T*p,T*a,szName,strlen(szName),STL(1),看程序写结果,class A private:int nId;p

23、ublic:A(int n)nId=n;cout nId contructor endl;A(const A,main()vector vp;vp.push_back(new A(1);vp.push_back(new A(2);vector v;v.push_back(3);,1 contructor2 contructor3 contructor3 copy constructor3 destructor3 destructor,STL(2),程序输出结果如下,请填空Tom,Jack,Mary,John,,template class MyClass T arrayT2;public:My

24、Class(T*begin)copy(begin,begin+T2,array);void List()T*i;for(i=array;i!=array+T2;i+)cout*i,;,main()string array4=Tom,Jack,Mary,John;_;obj.List();,class T int T2,MyClass obj(array),STL(3),程序输出结果如下,请填空Tom,Jack,Mary,John,template class MyClass vector array;public:MyClass(T*begin,int n):array(n)copy(begi

25、n,begin+n,array.begin();void List()_;for(i=array.begin();i!=array.end();i+)cout*i,;,main()string array4=Tom,Jack,Mary,John;_;obj.List();,vector:iterator i;,MyClass obj(array,4),STL(4),程序输出结果如下,请填空1 2 6 7 8 9main()int a=8,7,8,9,6,2,1;_;for(int i=0;i o(cout,);copy(v.begin(),v.end(),o);,setv,v.insert(a

26、i),STL(5),程序输出结果如下,请填空A:Print:1B:Print:2B:Print:3,template void PrintAll(const T,(*i)-Print(),STL(5),class B:public A public:B(int i):A(i)void Print()cout B:Print:nVal endl;main()_;v.push_back(new A(1);v.push_back(new B(2);v.push_back(new B(3);PrintAll(v);,vector v,STL(6),*写一个自己的 CMyostream_iterator

27、 模板,使之能和 ostream_iterator 模板达到一样的效果,using namespace std;main()int a5=1,2,3,4,5;CMyostream_iterator output(cout,*);vector v(a,a+5);copy(v.begin(),v.end(),output);,提示,参考 copy 的helptemplate OutIt copy(InIt first,InIt last,OutIt x);The template function evaluates*(x+N)=*(first+N)once for each N in the r

28、ange 0,last-first),for strictly increasing values of N beginning with the lowest value.It then returns x+N.If x and first designate regions of storage,x must not be in the range first,last)copy 的源代码:template inline_OI copy(_II _F,_II _L,_OI _X)for(;_F!=_L;+_X,+_F)*_X=*_F;return(_X);,48,要支持copy函数必须重载

29、三个运算符:*,=,+,STL(6),template class CMyostream_iteratorprivate:ostream,STL(7),程序输出结果如下,请填空5*3*4*2*1*1*2*3*4*5*1*2*9*4*5*,template class MyClass:public list public:_(int n)iterator i;int k=0;for(_)if(k=n)return _;k+;MyClass(int n):_;,main()MyClass obj(5);int a=5,3,4,2,1;copy(a,a+5,obj.begin();ostream_i

30、terator output(cout,*);copy(obj.begin(),obj.end(),output);cout endl;obj.sort();copy(obj.begin(),obj.end(),output);cout endl;obj2=9;copy(obj.begin(),obj.end(),output);,T&operator,i=begin();i!=end();i+,*i,list(n),注意:list容器类派生类的初始化,STL(8),标准矩形问题其边平行于坐标轴 给定不重复的 n 个整点(横、纵坐标都是整数的点),求从这n个点中任取4点作为顶点所构成的四边形中

31、,有多少个是标准矩形。,输入数据:第一行是点的数目其后每一行都代表一个点,由两个整数表示,第一个是x坐标,第二个是y坐标输出要求:输出标准矩形的数目,STL(8),struct Point int x;int y;Point(int x_,int y_):x(x_),y(y_);bool operator(const Point,main()int t;int x,y;cin t;vector v;while(t-)cin x y;v.push_back(Point(x,y);_;vector:iterator i,j;int nTotalNum=0;,sort(v.begin(),v.end

32、(),STL(8),for(i=v.begin();i x,i-y),j=i+1,j v.end(),j+,binary_search(v.begin(),v.end(),Point(i-x,j-y),i-x!=j-x,i-y!=j-y,nTotalNum/2,STL(9),*MyMax模板 不准使用除 true 和 false 以外的任何常量,并且不得假设 true的值是1或任何值不得使用任何库函数或库模板(包括容器和算法)不得使用 static 关键字。提示:copy函数模板的第三个参数是传值的,template class MyMax public:T*pMax;/指向用于存放最大值的变

33、量 bool bFirst;/记录最大值时会用到的标记 MyMax(T*p):bFirst(true),pMax(p);/开头/结尾;,MyMax模板的作用与求数组或向量中的最大元素有关,而且下面程序的输出结果是:5136请补出马克斯删掉的那部分代码。,STL(9),class A public:int i;A(int n):i(n);A();bool operator(const A,main()A a5=A(1),A(5),A(3),A(4),A(2);int b9=1,5,30,40,2,136,80,20,6;int nMax;A aMax;MyMax outputa(,STL(9),/需要实现支持copy函数的三个运算符重载,以及()算符MyMax,课后参考,2004年考题及答案2006年考题及答案2007年考题及答案,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号