第7篇_操作符重载.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
例:把动态对象初始化为全‘0’ #include cstring class A { int x,y; public: void *operator new(size_t size) { char *p=new char[size]; //调用系统堆空间分配操作。 memset(p,0,size); //把申请到的堆空间初始化为全“0”。 return p; } ...... }; A *p=new A; //对象的数据成员x和y被初始化为0。 例:在“堆区”外为动态对象分配空间 #include cstring class A { ...... public: A(int i) { ... } void *operator new(size_t size,void *p) { return p; } }; char buf[sizeof(A)]; A *p=new (buf) A(0);//动态对象的空间分配为buf ...... p-~A(); //使得p所指向的对象消亡。 重载delete 操作符delete也必须作为静态的成员函数来重载(static说明可以不写),其格式为: void operator delete(void *p, size_t size); 返回类型必须为void,第一个参数类型为void *,第二个参数可有可无,如果有,则必须是size_t类型。 重载操作符delete的使用格式与未重载的相同。 例:重载操作符new与delete来管理程序中某类动态对象的堆空间。 #include cstring const int NUM=32; class A { ...... //类A的已有成员说明。 public: static void *operator new(size_t size); static void operator delete(void *p); private: static A *p_free; //用于指向A类对象的自由空间链表。 A *next; //用于实现自由空间结点的链接。 }; A *A::p_free=NULL; void *A::operator new(size_t size) { A *p; if (p_free == NULL) { //申请NUM个A类对象的堆空间。 p_free = (A *)new char[size*NUM]; //建立自由结点链表。 for (p=p_free; p!=p_free+NUM-1; p++) p-next = p+1; p-next = NULL; } p = p_free; p_free = p_free-next; memset(p,0,size); return p; } p_free NULL void A::operator delete(void *p) { ((A *)p)-next = p_free; p_free = (A *)p; } p_free NULL 自定义类型转换操作符 带一个参数的构造函数可以用作从一个基本数据类型或其它类到一个类的转换。 例如: class Complex { double real, imag; public: Complex() { real = 0; imag = 0; } Complex(double r) //一个参数的构造函数可兼作类型转换用 { real = r; imag = 0; } Complex(double r, double i) { real = r; imag = i; } ...... friend Complex operator + (const Complex x, const Complex y); }; Complex operator + (const Complex x, const Complex y) { Complex temp; temp.real = x.real+y.real; temp.imag = x.imag+y.imag; return temp; } ...... Complex c1(1,2),c2,c3; c2 = c1 + 1.7; //1.7隐式转换成一个复数对象Complex(1.7) c3 = 2.5 + c2; //2.5隐式转换成一个复数对象Complex(2.5) 自定义类型转换 class A { int x,y; pub

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档