面向对象程序设计》讲义

上传人:san****019 文档编号:70214668 上传时间:2019-01-16 格式:PPT 页数:79 大小:868.51KB
返回 下载 相关 举报
面向对象程序设计》讲义_第1页
第1页 / 共79页
面向对象程序设计》讲义_第2页
第2页 / 共79页
面向对象程序设计》讲义_第3页
第3页 / 共79页
面向对象程序设计》讲义_第4页
第4页 / 共79页
面向对象程序设计》讲义_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《面向对象程序设计》讲义》由会员分享,可在线阅读,更多相关《面向对象程序设计》讲义(79页珍藏版)》请在金锄头文库上搜索。

1、面向对象程序设计讲义,第 9 章,9.1 函数重载 9.1.1 构造函数重载 举例:计时器实例 #include #include class timer /定义计时器类 int seconds; public: timer(); /声明四个重载函数 timer(char *t); timer(int t); timer(int, int);,第 9 章 重 载,int gettimer(); /此函数返回seconds的值 / ; timer:timer( ) /定义无参数构造函数,给seconds清零 seconds=0; timer:timer(int t) /定义一个整型参数的构造函数

2、 seconds=t; timer:timer(char *t) /定义含一个字符串构造函数 seconds=atoi(t); timer:timer(int min,int sec) /定义一个含两个整型参 seconds=min*60+sec; /数的构造函数 int timer:gettimer() /取私有变量seconds的值 return seconds;,main() timer t1,t2(“123”),t3(23),t4(2,34); cout“object t1:”t1.gettimer()“n”; cout“object t2:”t2.gettimer()“n”; cou

3、t“object t3:”t3.gettimer()“n”; cout“object t4:”t4.gettimer()“n”; ,9.1.2 类成员函数重载 举例:一个日期类的例子 #include #include #include class date /定义日期类 int year; int month; int day; public: date() year=0;month=0;day=0; date(int,int,int); date(char *); void getdate(char *); void getdate(int *,int *,int *); ;,date:d

4、ate(int yy,int mm,int dd) /传递整型参数的构造函数 year=yy; month=mm; day=dd; date:date(char *str) /传递字符串的构造函数 char *ss=new char5; /定义一个字符串,并为其分配内存 ss0=str0; /取字符串前两个字符,为月份 ss1=str1; ss2=0; month=atoi(ss); /将字符串转换成整数 ss0=str3; /取字符串中的第4,5个字符,为日期 ss1=str4; day=atoi(ss);,ss0=2; ss1=0; ss2=str6; /取字符串中的第7,8个字符,为年份

5、 ss3=str7; ss4=0; year=atoi(ss); delete ss; /释放分配的内存 ,void date:getdate(char *str) char *ss=new char5; itoa(month,ss,10); /将month转换成字符串给ss, 10为进制 if(month10) ss1=ss0; /若月份小于10,在第一位加上0 ss0=0; ss2=0; strcpy(str,ss); /字符串赋值 itoa(day,ss,10); /将day转换成字符串给ss strcat(str,”/”); /在日期字符串中的月份后加入分隔符 if(day10) ss

6、1=ss0; /日期小于10,第一位加0 ss0=0;,ss2=0; strcat(str,ss); /将ss加到str后面 itoa(year,ss,10); /将year转换成字符串给ss ss0=/; ss1=ss2; ss2=ss3; ss3=0; strcat(str,ss); /将ss加到str后面 delete ss; date:getdate(int *yy,int *mm,int *dd) /将年、月、日值分别赋给三个整数 *yy=year; *mm=month; *day=dd; ,main() int *yy=new int,*mm=new int,*dd=new int

7、; char *datt=new char9; date da1,da2(2008,4,09),da3(“03/01/02”); da2.getdate(datt); da3.getdate(yy,mm,dd); coutdatt“n”; cout*yy“ ”*mm“ ”*dd“n”; delete yy,mm,dd,datt; ,/- #include #pragma hdrstop #include “U9_1_2.h“ /- #pragma package(smart_init) #pragma resource “*.dfm“ TForm1 *Form1; /* class date

8、/ int year; int month; int day;,public: date( ) year=0;month=0;day=0; date(int,int,int); date(String); int gety( ) return year; int getm( ) return month; int getd( ) return day; ;,date:date(int yy,int mm,int dd) / year=yy; month=mm; day=dd; date:date(String str) / month=StrToInt(str.SubString(1,2);

9、day=StrToInt(str.SubString(4,2); year=StrToInt(str.SubString(7,2); /-,void _fastcall TForm1:BtnRunClick(TObject *Sender) date da1,da2(2003,4,28),da3(“04/30/03“); Canvas-TextOutA(20,50,da1.gety(); Canvas-TextOutA(60,50,da1.getm(); Canvas-TextOutA(100,50,da1.getd(); Canvas-TextOutA(20,70,da2.gety(); C

10、anvas-TextOutA(60,70,da2.getm(); Canvas-TextOutA(100,70,da2.getd(); Canvas-TextOutA(20,90,“200“+IntToStr(da3.gety(); Canvas-TextOutA(60,90,da3.getm(); Canvas-TextOutA(100,90,da3.getd(); ,9.2 运算符重载 注意事项:重载运算符时,不能改变它们的优先级,不能改变运算符所需操作数的数目。 9.2.1 用成员函数重载运算符 1. 用成员函数重载运算符的语法形式 (1)在类定义体中声明运算符函数: type oper

11、ator (参数表) 注意事项:在参数表中,若运算符是一元的,则参数表为空,此时当前对象为运算符的单操作数;若运算符是二元的,则参数表中有一个操作数,此时当前对象作为运算符的左操作数,参数表中的操作数作为运算符的右操作数。,例如: class x / int operator +(x a); ; (2)定义运算符函数 type x:operator (参数表) /定义的操作 如上例的形式为: int x:operator + (x a) /. ,(3)重载运算符的使用 main( ) x a1,b1; y a2,b2; a1=a1+b1; / 正确 a2=a2+b2; / 错误 ,2. 用成员

12、函数重载运算符的使用举例 #include class point int x,y; public: point(int vx,int vy) x=vx;y=vy; point() x=0,y=0; point operator +(point p1); /重载运算符“+” point operator (point p1); /重载运算符“” void print()coutx“ ”y“n”; ;,point point:operator +(point p1) /定义两个对象的“+”函数 point p; p.x=x+p1.x; p.y=y+p1.y; return p; /返回当前对象与

13、p1对象之和 point point:operator -(point p1) /定义两个对象的“”函数 point p; p.x=x-p1.x; p.y=y-p1.y; return p; /返回当前对象与p1对象之差 ,main() point p1(10,10),p2(20,20),p3(); p3=p1+p2; p3.print(); p3=p1-p2; p3.print(); ,/-三维空间上对象的坐标操作- #include #pragma hdrstop #include “U9_2_2_1_1.h“ /- #pragma package(smart_init) #pragma

14、resource “*.dfm“ Tbc9_2_1_1 *bc9_2_1_1; /*- class three_d int x,y,z; public: three_d(int vx,int vy,int vz) x=vx;y=vy;z=vz;,three_d()x=0;y=0;z=0; three_d operator +(three_d t); three_d operator (three_d t); three_d operator =(three_d t); int getx()return x; int gety()return y; int getz()return z; ; three_d three_d:operator +(three_d t) three_d te; te.x=x+t.x; te.y=y+t.y; te.z=z+t.z; return te; /返回当前对象与t对象

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号