ch12补充(友元、运算符重载).ppt_第1页
ch12补充(友元、运算符重载).ppt_第2页
ch12补充(友元、运算符重载).ppt_第3页
ch12补充(友元、运算符重载).ppt_第4页
ch12补充(友元、运算符重载).ppt_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

静态成员 静态数据成员 用关键字static声明 该类的所有对象维护该成员的同一个拷 贝 必须在类外定义和初始化,用(:)来指明 所属的类。 静态成员函数 类外代码可以使用类名和作用域操作符 来调用静态成员函数。 静态成员函数只能引用属于该类的静态 数据成员或静态成员函数。 静态成员 具有静态数据成员的 Point类 #include class Point public: Point(int xx=0, int yy=0) X=xx; Y=yy; countP+; Point(Point int GetX( ) return X; int GetY( ) return Y; void GetC( ) cout class Application public: static void f( ); static void g( ); private: static int global; ; int Application:global=0; void Application:f( ) global=5; void Application:g( ) cout class Point/Point类声明 public:/外部接口 Point(int xx=0, int yy=0) X=xx;Y=yy;countP+; Point(Point /拷贝构造函数 int GetX( ) return X; int GetY( ) return Y; static void GetC( ) cout #include class Point/Point类声明 public:/外部接口 Point(int xx=0, int yy=0) X=xx;Y=yy; int GetX( ) return X; int GetY( ) return Y; friend float fDist(Point private:/私有数据成员 int X,Y; ; 友 元 double Distance( Point double dy=a.Y-b.Y; return sqrt(dx*dx+dy*dy); int main( ) Point p1(3.0, 5.0), p2(4.0, 6.0); double d=Distance(p1, p2); cout class complex private: int real; int imag; public: complex(int x=0,int y=0) real=x; imag=y; void disp() cout class complex private: int real; int imag; public: complex(int x=0,int y=0) real=x; imag=y; void disp() cout class complex private: int real; int imag; public: complex(int x=0,int y=0) real=x; imag=y; complex operator-() complex temp; temp.real=real*-1; temp.imag=imag*-1; return temp; friend ostream int imag; public: complex(int x=0,int y=0) real=x; imag=y; complex operator+=(const complex imag+=ob.imag; return *this; friend ostream public: string(char *s=“) p=new charstrlen(s)+1; strcpy(p,s); string(const string strcpy(p,str.p); void disp() cout #include class array private: int size; int count; int *p; public: array() count=0; size=10; p=new intsize; void add(int x) if(count=size) int *q; size+=10; q=new intsize; for(int i=0;i=count) cout class complex private: int real; int imag; public: complex(int x=0,int y=0) real=x; imag=y; void disp() cout,其余的运算符都可以使用友元函 数来实现重载。 2、不能定义新的运算符,只能重载已有的运算 符。但重载函数的功能可以不保持原来的含义。 3、有些情况不能用成员函数重载,比如重载 和 class complex private: int real; int imag; public: complex(int x=0,int y=0) real=x; imag=y; void disp() cout #include using namespace std; enum StuSortben,shuo,bo,hou; enum TeacherSortzhu,jiang,fu,jiao,te; char s 10=“本科“,“硕士“,“博士“,“博士后“; char t 10=“助教“,“讲师“,“副教授“,“教授“,“ 特级教授“; class student private: string name; StuSort sort; public: student(string n=“,StuSort s=ben) name=n; sort=s; void disp()const cout) #include class complex private: int real; int imag; public: complex(int x=0,int y=0) real=x; imag=y; friend ostream ; ostream inob.imag; return in; void main() complex c1,c2; cinc1c2; cout(istream 1、为什么要用友员重载?是否可以用成员重载? 2、函数的第一个参数和返回值的类型为什么是引 用?返回值有什么意义? 3、对于重载输入流函数,第二个参数为什么是引 用? 【例4.8】复数类 class Complex double Real,Image ; public : Complex(double r=0.0, double i=0.0):Real(r),Image(i) Complex(Complex Image=com.Image ; void Print()cout“Real=“Realt “Image=“Imagen; Complex operator+(Complex); /重载+运算符函数 Complex operator+(double); /重载+运算符函数 Complex operator=(Complex); /重载=运算符函数 Complex operator+=(Complex); /重载+=运算符函数 double abs(void); /求绝对值函数 Complex operator*(Complex); /重载*运算符函数 Complex operator/(Complex); ; /重载/运算符函数 Complex Complex:operator+(Complex c)/重载+ Complex Temp(Real+c.Real , Image+c.Image) ; return Temp ; 验证主函数 【例4.8】复数类 Complex Complex:operator+(double d) /重载+ return Complex(Real+d , Image); Complex Complex:operator+=(Complex c)/重载+ = Complex temp; /为了返回Complex类型的值,使+=可以连续使用 temp.Real=Real+c.Real; temp.Image=Image+c.Image; Real=temp.Real; Image=temp.Image; return temp; Complex Complex:operator=(Complex c)/重载= Complex temp; /定义temp为可返回Complex类型值,使=可连续使用 temp.Real=c.Real; temp.Image=c.Image; Real=temp.Real; Image=temp.Image; return temp; double Complex:abs(void)/求绝对值函数 return sqrt(Real*Real+Image*Image); Complex Complex:operator*(Complex c)/重载* return Complex(Real*c.Real-Image*c.Image , Real*c.Image+c.Real*Image); 【例4.8】复数类 Complex Complex:operator/(Complex c) /重载/ double d=c.Real*c.Real+c.Image*c.Image ; return Complex(Real*c.Real+Image*c.Image)/d , (Image*c.Real-Real*c.Image)/d) ; int main(void) Complex c1(1.0,1.0) , c2(2.0,2.0) , c3(4.0,4.0) , c; double d=0.5 ; c1.Print(); c=c2+c3 ; c.Print() ; c+=c1 ; c.Print() ; c=c+d ; c.Print() ; /可用0.5代替d c=c3*c2 ; c.Print() ; c=c3/c1 ; c.Print() ; cout“c3的模为:“c3.abs()endl ; c=c3=c2=c1; c.Print(); /连续赋值 c+=c3+=c2+=c1; c.Print(); /连续加赋值 return 0; 【例4.8_1】 用友元函数重载运算符 class Complex doubleReal,Image ; public : Complex(double r=0.0, double i=0.0):Real(r),Image(i) Complex(Complex Image=com.Image ; void Print() cout“Real=“Realt“Image=“Imagen friend Complex operator+(const Complex friend Complex friend double abs(void); friend Complex operator*(const Complex friend Complex operator/(const Complex ; 【例4.8_1】 用友元函数重载运算符 Complex c1.Image=c1.Image+c2.Image; return c1; /返回由引用参数传递过来的变量,函数返回值可为引用 Complex operator+(const Complex /隐式说明局部对象 Complex operator*(const Complex Complex operator/(const Complex return Complex(c1.Real*c2.Real+c1.Image*c2.Image)/d , (c1.Image*c2.Real-c1.Real*c2.Image)/d) ; double abs(Complex 【例4.8_1】 用友元函数重载运算 符 int main(void) Complex c1(1.0,1.0) , c2(2.0,2.0) , c3(4.0,4.0)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论