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

3 类的扩展讨论 881508629.ppt

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3类的扩展讨论881508629ppt课件

第2讲——类和数据抽象 ——了解面向对象编程的抽象、封装特性 2 类的扩展讨论 * 构造与析构函数 * 构造函数:与类同名的函数 class Time{ public: //Time(); Time(int=0,int=0,int=0); //Time(int h,int m,int s); void setTime(int,int,int); void printMilitary(); void printStandard(); private: int hour; int minute; int second; }; Time:: Time() {hour=minute=second=0;} Time:: Time(int h,int m,int s) {hour=h;minute=m;second=s;} 确保初始化的合法性 在对象建立时调用 如果没有定义,编译器会用默认构造函数使对象有一个确定的状态 可以重载 默认参数的使用 没有返回值 数据成员可以在类定义时初始化吗? 析构函数:~+类名 构造函数的逆操作 ~Time ( ) 不能够重载 没有参数与返回值 对象指针 * 指向对象的指针: 类名 * 对象指针名 指向对象成员的指针: 数据类型名 (* 指针变量名)(参数列表) 使用this 指针 每个对象维护指向自身的指针 指针类型取决于对象类型和成员函数const声明 访问成员变量 (*this).x 公用数据的保护——const * const对象与 const成员函数 const对象:const Time noon(12,0,0); 不能被赋值,必须初始化 不允许修改 不允许调用普通的成员函数 const 成员函数 可以访问const对象 声明和定义都必须使用关键字const int getValue() const { 函数体 } const 数据成员 不能被赋值,必须初始化 指向对象的常指针v.s.指向常对象的指针变量 对象的动态创建/释放、赋值及复制 对象的动态创建及释放 创建:利用指针和new,常用于动态数据结构 Box * pt; pt = new Box; 释放:delete pt; 对象的赋值 用赋值运算符“=”实现 只对数据成员赋值 类包含动态分配的数据成员时候不能使用赋值操作 对象的复制 Box box2(box1); Box box2=box1; 同类对象的复制构造函数(与普通构造函数有何差别?) 复制 v.s. 赋值 * 类的静态成员 * 类的静态数据成员与静态成员函数 供类的所有对象共享的信息 每个类的成员函数只有一份拷贝 每个类的数据成员都有其自己的拷贝 只有类作用域 静态数据成员必须在文件作用域内初始化 访问方法: public类型: classname::static member; Private : classname::pubStaticFun(); 复合与友元 * 复合:把类作为其它类的成员 成员对象在包括它的对象之前建立 如果没有成员初始化值,则成员对象的默认构造函数会被调用 友元函数和友元类 定义 可以是函数,也可以是类 非对称性,非传递性 最好把友元声明放在类定义起始处 符合最小化访问原则吗? 模板类 * 模板类 类定义: template class T class classname{ int fun(T) } 成员函数定义: template class T classname T:: fun (T variable) { ; } 作业 1. 建立用于完成复数算术运算的类Complex。编写一个程序测试该类。复数的形式为:realPart+imaginaryPart*i,用double变量表示类中的私有数据成员。给类提供一个能够对所申明的对象初始化的构造函数。为了能够在不提供初始化值的时候也能完成对象的初始化,构造函数中应该提供默认值。给类提供能够完成如下功能的公有成员函数:a)两个复数相加,即实部与实部相加,虚部与虚部相加;b)两个复数相减,即被减数的实部减去减数的实部,被减数的虚部减去减数的虚部;c)以(a,b)的格式输出结果。 2. 将例3.13中的Time类声明为Date类的友元类,通过Time类中的display函数引用Date类对象的私有数据,输出年、月、日和时、分、秒。 *

文档评论(0)

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

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

1亿VIP精品文档

相关文档