您好,欢迎访问三七文档
运算符重载1、对于下面的类MyString,要求重载一些运算符后可以计算表达式:a=b+c;,其中a,b,c都是类MyString的对象.请重载相应的运算符并编写程序测试。classMyString{public:MyString(char*s){str=newchar[strlen(s)+1];strcpy(str,s);}~MyString(){delete[]str;}private:char*str;};*******************************************************************************编程如下:#includeiostream#includestring.husingnamespacestd;classMyString{public:MyString(char*s){str=newchar[strlen(s)+1];strcpy(str,s);}MyString(){str=newchar;str[0]='\0';}~MyString(){delete[]str;}voidPrintSelf(){coutstrendl;}MyString&operator+(MyString&b)//字符串连接{char*temp=str;str=newchar[strlen(temp)+strlen(b.str)+1];str=strcpy(str,temp);delete[]temp;str=strcat(str,b.str);return*this;}MyString&operator=(MyString&c)//赋值函数{if(this==&c)return*this;//检查自赋值delete[]str;//释放原有的内存资源str=newchar[strlen(c.str)+1];//分配新的内存资源strcpy(str,c.str);//并复制内容return*this;//返回本对象的引用}private:char*str;};intmain(){MyStringa;MyStringb(BBB),c(CCC);a=b+c;a.PrintSelf();return0;}继承与派生1、以点(point)类为基类,重新定义矩形类和圆类。点为直角坐标点,矩形水平放置,由左下方的顶点和长宽定义。圆由圆心和半径定义。派生类操作判断任一坐标点是在图形内,还是在图形的边缘上,还是在图形外。缺省初始化图形退化为点。要求包括拷贝构造函数。编程测试类设计是否正确。解:#includeiostream#includecmathusingnamespacestd;constdoublePI=3.1415926535;classPoint{private:doublex,y;public:Point(){x=0;y=0;}Point(doublexv,doubleyv){x=xv;y=yv;}Point(Point&pt){x=pt.x;y=pt.y;}doublegetx(){returnx;}doublegety(){returny;}doubleArea(){return0;}voidShow(){coutx=x''y=yendl;}};classCircle:publicPoint{doubleradius;public:Circle(){radius=0;}Circle(doublexv,doubleyv,doublevv):Point(xv,yv){radius=vv;}Circle(Circle&cc):Point(cc){radius=cc.radius;}//拷贝构造函数doubleArea(){returnPI*radius*radius;}voidShow(){//注意怎样访问基类的数据成员coutx=getx()'\t'y=gety()'\t'radius=radiusendl;}intposition(Point&pt){doubledistance=sqrt((getx()-pt.getx())*(getx()-pt.getx())+(gety()-pt.gety())*(gety()-pt.gety()));doubles=distance-radius;if(s==0)return0;//在圆上elseif(s0)return-1;//在圆内elsereturn1;//在圆外}};classRectangle:publicPoint{doublewidth,length;public:Rectangle(){width=0;length=0;}Rectangle(doublexv,doubleyv,doublewv,doublelv):Point(xv,xv){width=wv;length=lv;}Rectangle(Rectangle&rr):Point(rr){width=rr.width;length=rr.length;}doubleArea(){returnwidth*length;}voidShow(){coutx=getx()'\t'y=gety()'\t';coutwidth=width'\t'length=lengthendl;}intposition(Point&pt);};intRectangle::position(Point&pt){doubles1,s2;s1=(pt.getx()-getx());s2=(pt.gety()-gety());if(((s1==0||s1==width)&&s2=length)||((s2==0||s2==length)&&s1=width))return0;elseif(s1width&&s2length)return-1;//0在矩形上,-1在矩形内elsereturn1;//1在矩形外}intmain(){Circlecc1(3,4,5),cc2,cc3(cc1);Rectanglert1(0,0,6,8),rt2,rt3(rt1);Pointp1(0,0),p2(6,8),p3(3,3),p4(8,4),p5(8,8);cc1.Show();cc2.Show();rt1.Show();rt2.Show();cout点p1:;p1.Show();cout矩形rt3:'\t';rt3.Show();switch(rt3.position(p1)){case0:cout在矩形上endl;break;case-1:cout在矩形内endl;break;case1:cout在矩形外endl;break;}cout圆cc3:'\t';cc3.Show();switch(cc3.position(p1)){case0:cout在圆上endl;break;case-1:cout在圆内endl;break;case1:cout在圆外endl;break;}cout点p2:;p2.Show();cout矩形rt3:'\t';rt3.Show();switch(rt3.position(p2)){case0:cout在矩形上endl;break;case-1:cout在矩形内endl;break;case1:cout在矩形外endl;break;}cout圆cc3:'\t';cc3.Show();switch(cc3.position(p2)){case0:cout在圆上endl;break;case-1:cout在圆内endl;break;case1:cout在圆外endl;break;}cout点p3:;p3.Show();cout矩形rt3:'\t';rt3.Show();switch(rt3.position(p3)){case0:cout在矩形上endl;break;case-1:cout在矩形内endl;break;case1:cout在矩形外endl;break;}cout圆cc3:'\t';cc3.Show();switch(cc3.position(p3)){case0:cout在圆上endl;break;case-1:cout在圆内endl;break;case1:cout在圆外endl;break;}cout点p4:;p4.Show();cout矩形rt3:'\t';rt3.Show();switch(rt3.position(p4)){case0:cout在矩形上endl;break;case-1:cout在矩形内endl;break;case1:cout在矩形外endl;break;}cout圆cc3:'\t';cc3.Show();switch(cc3.position(p4)){case0:cout在圆上endl;break;case-1:cout在圆内endl;break;case1:cout在圆外endl;break;}cout点p5:;p5.Show();cout矩形rt3:'\t';rt3.Show();switch(rt3.position(p5)){case0:cout在矩形上endl;break;case-1:cout在矩形内endl;break;case1:cout在矩形外endl;break;}cout圆cc3:'\t';cc3.Show();switch(cc3.position(p5)){case0:cout在圆上endl;break;case-1:cout在圆内endl;break;case1:cout在圆外endl;break;}return0;}2、利用C++的组合概念,创建时间date,yearclassA{public:voidfun1(){std::coutA::fun1std::endl;fun2();}voidfun2(){std::coutA::fun2std::endl;}inta;};classB:publicA{public://voidfun1(){}voidfun2(){std::coutB::fun2std::endl;}inta;};int_tmain(intargc,_TCHAR*argv[]){std::coutsizeof(A)std::endl;return0;}classDate//定义一个日期类{public:Date(intm,intd)//构造函数{month=m;day=d;}voidPrint();//打印函数private:intmonth,day;//月份和日期为私有成员};classYear//定义一个年类{public:Year(inty,intm,intd):year(y),date(m,d){};//构造函数,子对象voidPrint();//打印函数private:Datedate;//定义Date类的一个对象dateintyear;//定义私有成员year};voidDate::Print(){coutmonth月day日endl;}voidYear::Print(){coutyear年;date.Print();//这个打印函数调用Date类的打印函数}intmain(){Yearh(2016,6,16);//定义year类的一个对象h并初始化为2016616h.Print();//打印return0;}简单的函数指针的应用
三七文档所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文标题:C++编程练习题
链接地址:https://www.777doc.com/doc-3747361 .html