第2章C++第1、2、3章课件(李琳).ppt

第2章C++第1、2、3章课件(李琳).ppt

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共132页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关键字public、private和protected被称为访问控制符,用来说明类成员的访问权限。 其中, 各个成员函数的类外实现是类的实现部分, 即类中声明的成员函数的代码实现。 那么,什么是类外实现呢? 简单地说,就是把成员函数的实现代码放到类外去。 这样一来,类的声明部分就只包含数据成员的声明和成员函数原型的声明了。 注意: 1、拷贝构造函数的函数名就是类名,同时没有返回类型 2、拷贝构造函数只能有一个参数,而且是本类类型,表示将以一个本类的对象作为拷贝源来进行拷贝。const关键字约束参数的不可改变性,这样可以确保作为拷贝源的同类对象的状态不会在拷贝中被修改。参数采用引用的方式,是因为引用不占内存空间,传递实参的引用可以减小系统开销。 B. 如果类中含有指针型的数据成员,那么就有必要定义一个深度拷贝构造函数。它与浅拷贝不同的是,在拷贝之前先分配一块堆内存空间用来存放指针型数据成员要指向的内容,然后再进行内容的拷贝,而不是指针值的拷贝(因为这实际是地址的拷贝),以此来避免内存错误的发生。有关此类话题将放在教材4.5中一起来讨论. 声明一个析构函数的语法格式如下: public: ~类名(); 析构函数的函数名与类名相同,只是在前面多加了一个“ ~ ”。它没有参数和返回值。由于一个类中只可能定义一个析构函数,所以析构函数不能重载。 下面,我们在Date类中添加一个析构函数,让它来完成日期对象的清除工作。 const int A::b=10; int main( ) { A a1(100), a2(0); a1.Print( ); a2.Print( ); } ? 程序运行结果: 100:10 0:10 需要注意以下几点: 一、构造函数对常数据成员进行初始化时必须通过初始化列表进行。 二、对象创建之后,其常数据成员的值不能在任何函数中改写。 三、如果类有多个重载构造函数都必须初始化常数据成员。 2.7 应用实例:员工信息管理系统 参见教材第2.7节。 习题 1. 简述构造函数和析构函数分别有什么作用? 2. 公有成员和私有成员的区别是什么? 3. 什么是拷贝构造函数?它何时被调用? 4. 声明一个名为Tree的类,它有数据成员age(树龄),有成员函数grow(int year),用于计算经过year这么多年的成长后树的最新年龄,以及GetAge(),用于提取树的年龄,并定义构造函数用于初始化tree对象的属性。 5. 创建一个类,模仿基本数据类型的部分功能,将这个类命名为Integer(注意,这和表示整数类型的int大小写不同)。 Integer类拥有整型数据成员value(数值),还有一些成员函数,比如显示一个Integer对象的值,以及将两个Integer对象相加。 要求定义构造函数用于初始化Integer对象的值。 6. 考虑几何图形圆,它有属性:半径,行为:获取半径值,计算周长,计算面积,输出圆的相关信息。 根据上述分析,请声明并实现一个Circle类,最后给出测试代码。 7. 编写一个程序,设计一个类Score用于统计一个班的学生成绩,其中定义一个静态数据成员totalScore存储总分,一个静态成员函数GetTotalScore( )实现对该静态数据成员的访问。 8. 创建一个名为Time的类,它包括分别表示小时、分钟和秒的int类型的数据成员以及两个构造函数,一个构造函数将这个数据初始化为0,另一个将它初始化为一个固定的值。 另有一成员函数将时间以11:59:59的格式显示在屏幕上。 谢谢 例2.15 为Point类提供访问和修改计数器的行为。 class Point { public: Point(){ x=0; y=0; counter++; //每调用构造函数创建对象计数器的值递增一个 } Point( float x, float y ) { this-x=x; this-y=y; counter++; // 同上 } ~Point() { counter--; //每调用析构函数消亡对象计数器的值递减一个 } void move(float x, float y) { this-x=x; this-y=y; } float getX(){ return x; } float getY(){ return y; } static int getCounter(){ return counter; } private: float x; float y; s

文档评论(0)

东山书苑 + 关注
实名认证
内容提供者

业务以学生学习成长为中心,为外语培训、中小学基础教育、学前教育,提供各种学习资料支持服务。

1亿VIP精品文档

相关文档