网站大量收购闲置独家精品文档,联系QQ:2885784924

c++类的建立及应用解析.ppt

  1. 1、本文档共71页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面向对象的程序设计 二、new运算符 思考:new Class与new Class[]在内存中形成的结构有什么不同? 面向对象的程序设计 三、delete 运算符 new 动态分配的对象,需要由delete来释放。 释放时自动调用析构函数 需要指出释放一个对象,还是数组 delete p; //释放掉指针p指向的对象 delete []p;//释放掉以指针p作为首地址的一系列对象(new分配时会自动保存数量信息) 面向对象的程序设计 四、注意事项 使用后及时销毁 与malloc/free类似,用new建立的对象必须在需要销毁时用delete销毁,否则在程序退出前将一直存在。 示例19 面向对象的程序设计 四、注意事项 内存泄漏(Memory Leak) 野蛮指针 (Brutal Pointer) 示例20 面向对象的程序设计 五、课后练习 使用面向对象以及new/delete运算符,改写结构体一章所学的链表程序。 8.8 友元 面向对象的程序设计 私有成员是对类成员访问的一种限制,有时也可以通过一些方法,放宽这种限制,其中一种方法就是友元(friend关键字) 面向对象的程序设计 一、友元函数 可以是普通函数,也可以是其他类的成员函数 说明友元时,要在一个类的定义中,用friend 来说明函数原型 class Point{ int x,y; public: Point(int x,int y); friend int compare(Point p1, Point p2); }; int compare(Point p1, Point p2) { return p1.x*p1.x+p1.y*p1.y-p2.x*p2.x-p2.y*p2.y; } 示例21 面向对象的程序设计 二、友元类 在一个类的定义中,用friend来说明一个类名,被说明类的所有成员函数都是该类的友元函数 面向对象的程序设计 二、构造函数 class CDate { int year,month,day; public: CDate(int y,int m,int d); }; CDate::CDate(int y,int m,int d) { year=y; month=m; day=d; } //两种调用方式 CDate day1(2011, 5, 1); CDate day2 = CDate(2011, 6, 1); 构造函数的例子 示例4 面向对象的程序设计 二、构造函数 可以通过重载的方式,构造多个参数不同的构造函数,用来以不同的方式初始化对象 除了最普通的构造函数,还有几种常见的不同类型的构造函数 示例5 面向对象的程序设计 三、具有缺省参数值的构造函数 与普通函数一样,构造函数可以声明参数的缺省值 在函数声明中给出缺省值 class CDate { CDate(int y=2011,int m=5,int d=1); }; CDate day1; CDate day2(2010); CDate day3(2008,6); 示例6 面向对象的程序设计 四、初始化列表 也可以不在构造函数中显式的赋值,而是在构造函数定义中的参数列表后加冒号,然后对成员逐个赋值,这一机制叫做初始化列表。 列表中初始化的顺序是类定义时成员声明的顺序,而不是列表中的顺序 初始化列表的效率很高,并且某些特殊的成员必须在这里得到值,而不能在函数体内赋值。 CDate::CDate(int y, int m, int d): year(y), month(m), day(d) { } 面向对象的程序设计 五、缺省的构造函数 没有任何参数的构造函数 当定义一个对象切没给出任何参数值是自动调用该构造函数 CClock:: CClock(){seconds=0;} CClock clock1; 一个缺省的构造函数,和一个全部参数值都要缺省值的构造函数不能同时存在 如果没有任何构造函数,会自动生成一个缺省构造函数,如果已经定义了任何一个构造函数,就不会自动生成了。 示例7;8 面向对象的程序设计 六、拷贝构造函数 构造函数的参数是同类的引用 class X{ public: X(X); 或 X(const X );}; 用途: 用一个同类对象来初始化 为什么要使用引用? 用一个对象“初始化出一个相同的对象”,与建立一个新对象再赋值其意义是不同的。 如果没有定义拷贝构造函数,编译系统会自动生成一个。进行逐对成员的赋值(byte-wise) 示例9 面向对象的程序设计 六、拷贝构造函数 思考:在什么情况下自动生成的拷贝构造函数会失效? 示例10 面向对象的程序设计 七、析构函数(Destructor) 思考:下

文档评论(0)

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

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

1亿VIP精品文档

相关文档