欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

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

    • 资源ID:6393171       资源大小:395.32KB        全文页数:57页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    程序设计实习第二十一讲 习题课,类和对象基本概念(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 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类的成员函数,不能增加成员变量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 Samplepublic: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(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;cout 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();,MyInt,运算符重载(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&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 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:int*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()for(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)temp 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-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;MyString 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 charn+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;,Mystring类(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;public: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,class 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(_)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 private: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:AppendNode(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();,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;public: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:MyClass(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(begin,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(ai),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 模板,使之能和 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 range 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函数必须重载三个运算符:*,=,+,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_iterator 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点作为顶点所构成的四边形中,有多少个是标准矩形。,输入数据:第一行是点的数目其后每一行都代表一个点,由两个整数表示,第一个是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(),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;/指向用于存放最大值的变量 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年考题及答案,

    注意事项

    本文(程序设计实习第二十一讲习题课.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开