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

第9章-关于类和对象的进一步讨论-1.ppt

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

第9章 关于类和对象的 进一步讨论 一. 构造函数 构造函数举例 带参数的构造函数 构造函数的重载 使用默认参数的构造函数 二. 析构函数 析构函数举例 三. 构造函数与析构函数的调用顺序 四. 对象数组 对象数组举例 例9.1 (续-1) 例9.1 (续-2) 例9.1 (续-3) 五. 对象指针 指向对象成员的指针 指向成员函数的指针(续) 例9.2—指向成员函数的指针(续) 关于 this 指针 六. 共用数据的保护—— const 类型的运用 const型对象(续) const型成员数据 const型成员函数 指向对象的常指针 指向常变量的指针变量 指向常对象的指针变量 对象的常引用 七. 对象的动态建立与释放 建立动态对象数组的格式 八. 对象的赋值与复制 对象赋值注意事项 拷贝构造函数的作用 拷贝构造函数的例子 例9.3 (续-1) 例9.3 (续-2) 例9.3 (续-3) 例9.3 (续-4) 例9.3 (续-5) 例9.3 (续-5) 第9章 练习-1 第9章 类和对象进一步讨论 将参数(对象)中成员数据复制到当前对象中. 何时调用拷贝构造函数 如果用户未定义拷贝构造函数, 则系统自动创建一个默认的拷贝构造函数, 其作用是简单地将成员数据复制到当前对象中. 注意: 如果类中存在动态分配内存的成员数据, 则用户必须自己定义拷贝构造函数, 正确完成动态数据的复制, 否则, 可能引起严重错误. (参见后面的例子) 用已有的对象初始化一个新定义的对象时; 当函数的参数为对象时, 按照值传递方式, 需要生成一个实参的拷贝, 则调用拷贝构造函数, 将实参对象复制到形参对象; 当函数的返回值为对象时, 在函数返回之前, 调用拷贝构造函数将局部对象拷贝到调用函数处. 若用户定义了拷贝构造函数, 则默认拷贝构造函数不起作用. 第9章 类和对象进一步讨论 例9.3 如建立一个向量类CVector. 建立两个二维向量c1,c2, 用c1复制一个新的向量c3. 求c3到c2所扫过的角度. // 头文件EMP9_3.h 的内容. class CVector { private: int m_nSize; // 向量的长度 double* m_pData; // 存放向量各元素值的数组头指针. public: CVector ( ); CVector (int nSize); CVector (const CVector V); // 拷贝构造函数 ~CVector ( ); bool InputVec (void); // Operations // 当前向量到v2向量扫过的角度 double ClampAng2D (const CVector v2); double Dot (const CVector V); // 向量的点积 void Display (void); // 显示向量的各个分量值 }; 第9章 类和对象进一步讨论 #include iostream #include cmath using namespace std; #include EMP9_3.h #define g_EPS 1.0e-6 #define PI 3.1415926 int main (void) { CVector c1(2); cout Vector 1: ; bool iOK = c1.InputVec (); if (! iOK) return 1; CVector c2(2); cout Vector 2: ; iOK = c2.InputVec (); if (! iOK) return 1; cout Define object c3: endl; CVector c3=c1; // 需调用拷贝构造函数. double ang = c3.ClampAng2D (c2); // 计算从c3到c2扫过的角度. cout Sweep angle from c3 to c2: ang endl; return 0; } 第9章 类和对象进一步讨论 // 缺省构造函数 CVector::CVector ( ) { m_nSize = 0; m_pData = NULL; } CVector::CVector (int m_nSize) // 形参名写成与成员变量名相同. { coutConstructor with 1 param. called. endl; if (m_nSize = 0) { CVector::m_nSize = 0; m_pData =

文档评论(0)

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

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

1亿VIP精品文档

相关文档