- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 - 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
 - 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
 - 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
 - 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
 
                        查看更多
                        
                    
                面向对象程序设计语言C第05章运算符重载
                     //整个函数体也可简化为  return Complex(re+c.re, im+c.im); 考虑一个整数数组    数组的大小在定义时初始化;    可以将对象(名)直接作为数组(名);    使用而且其大小在运行时可以改变。 class Array{int * p;int size;  public:    Array(int num)   {     size=(num6)?num:6;     p=new int[size]; }    ~Array( )      { delete [] p; }  int  operator[](int idx) {      if (idxsize) return p[idx];         else { expend(idx-size+1);      return p[idx];    }   } void expend(int off){  int * pi;  pi=new int [size+off];  for (int n=0;nsize;n++)       pi[n]=p[n];  delete [] p;  p=pi;  size+=off; } void contract(int offset) {   size=size-offset;} };   //类结束 void main( )  {   int num=0;    Array a_Array(10);    for (;num 10; num ++)       a_Array[num]= num;      a_Array[10]=10;    for (n=0; n=10; n++)      couta_Array[n]; } 输出运算符“”的第一个操作数是cout,它实际上是标准类类型ostream的对象的引用(它的定义在文件iostream中)。 若在程序中,用户自己定义 一个ostream的对象的引用,则也可以直接使用运算符“”。 #include iostream.h void main( )    {    int num=10;    ostream  scout=cout;    scoutnumendl;      }  则输出10 输入运算符“”的第一个操作数是cin,它实际上是标准类类型istream的对象的引用(它的定义在文件iostream中)。 若在程序中,用户自己定义 一个istream的对象的引用,也可以直接使用运算符“”。  class  Complex { 	double re,im;  public:    … 	 friend ostream  operator(ostream  , Complex  ); 	 friend istream  operator(istream  ,Complex  ); 	}; 	ostream  operator(ostream  os, Complex  c) { 		osc.re; 		if(c.im0)    os+c.imiendl; 		else            osc.imiendl; 		return os; 	} 	istream  operator(istream  is,Complex  c)	{ 		isc.rec.im; 		return is;  	} 	void main( ) 	{	Complex obj1,obj2;  	     	coutobj1obj2;	 		coutobj1“   ”obj2; 	} 对象的拷贝有两种方式:初始化和赋值。   将一个对象的数据成员对应地赋值给另一个对象的数据成员; 如果一个类包含有指针类型的数据成员,那么,该类的对象的拷贝(初始化和赋值)就可能会有问题。   对象的指针成员直接赋值,就可能导致指针悬挂。 需要重新定义拷贝构造函数和超载“=”的函数 class  String {char * pstr;int sz;    public:   String (int s)   { pstr=new char [sz=s]; }   ~String ( )       {delete [ ] pstr;  }     …  }; void main( ) {   String str1(10);   String str2=str1;   String str3(10);   …   str3=str1; } 执行该程序,会出现问题。Why? 缺省的拷贝构造函数为:  String:: String(const String  str)    {  pstr =str.pstr;      sz=str.sz ;    }   修改为 
                
原创力文档
                        
                                    

文档评论(0)