c+的+语言第7次课.ppt

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

3.6 共用数据的保护 3.6 共用数据的保护 用指针变量作形参时,形参和实参的对应关系见下表 3.6 共用数据的保护 何时使用指向常对象的指针?何时使用常对象? 当希望在调用函数时对象的值不能被修改,就应该把形参定义为指向常对象的指针,同时用对象的地址做实参,而实参对象可以是const型,也可以是非 const型。 如果要求对象不仅在函数调用过程中不被修改,而且在整个程序运行时不被修改,就应该把该对象定义成常对象。 3.6 共用数据的保护 对象的常引用 前面讲过,引用主要是用于函数调用,将改变后的变量值带回到被调用的函数外。 但如果不希望在函数中修改参数,可以把引用型形参定义成 const 型: 函数返回类型 函数名( const 形参类型 形参名); 则在函数中不能改变形参值,也就不能改变对应的实参值。 什么时候使用常指针和常引用?使用常指针或常引用作为函数参数,既能保证数据安全,不被修改;调用函数时又能不必建立实参的拷贝,提高了程序运行效率,节省了内存空间。 3.6 共用数据的保护 const 数据小结 3.7 对象的动态建立和释放 用new 动态创建的对象一般没有对象名,只能通过指针访问。 在执行new 运算时,如果内存不足,则创建失败。大多数C++编译系统都让 new 返回一个0指针,表示内存不足,操作失败。 动态撤消对象的方法:由new 创建的对象不再需要时,可以由delete运算符释放。上例pt的释放方法为: delete pt; 这样就撤消了pt指向的对象。 在执行 delete运算符时,在释放空间以前,系统自动调用析构函数,完成有关善后清理工作。 3.8 对象的赋值与复制 对象的赋值 对象之间的赋值是通过运算符“=”进行的,其过程是将一个对象的成员复制给另一同类对象的对应成员。 对象赋值格式: 对象名1=对象名2 对象的复制 C++可以根据一个已知的对象快速地复制出多个完全相同的对象。比如: Box box2(box1); 其作用就是对象的克隆,即用一个已知的对象 box1复制出一个完全相同的新对象 box2。 对象复制的格式: 类名 被克隆出来的新对象名(已有的对象名); C++还使用另一种方便的对象复制形式,形式为: 类名 目标对象名 = 源象名; 如: Box box2 = box1, box3 = box2; 对象的赋值与复制的不同点 对象的赋值:是在已经存在的对象之间进行数据赋值,因此必须先定义,再赋值;参数表是一般变量 对象的复制:从无到有地建立一个相同的新对象,参数只有一个,而且是已有的同类对象。 普通构造函数与拷贝构造函数的不同: 参数不同: 普通构造函数:类名(形参表列); // 普通构造函数的声明 拷贝构造函数:类名(类名 对象名); // 复制构造函数的声明 返回类型不同 拷贝构造函数返回一个对象。 3.9 静态成员 在C语言中,如果想在多个函数中共享一个变量值,我们一般用全局变量。但由于全局变量破坏了封装性,安全得不到保证,在C++中不提倡使用全局变量,我们可以使用静态的数据成员来达到这个目的。 静态数据成员 静态数据成员以 static 关键字定义。例如: class student { public: int display( ); private: static int count; char name[10]; int age; }; 3.9 静态成员 将对象中的 count 数据成员定义成 static 型,它就被同一种类的各个对象所共有,而不只属于某一个对象。静态数据成员只占一份内存空间,而不是各个对象各拥有一份内存空间!每个对象都可以引用这个静态数据成员。静态数据成员的值对各个对象都是一样的。如果改变它的值,则在各个对象中这个数据成员的值都同时改变。 3.9 静态成员 说明: 在为对象分配空间时,不分配静态数据成员的空间,因为它不属于任何对象。只要类中定义了静态数据成员,即使不定义对象,编译系统也要为静态数据成员开辟内存空间。 C语言中,我们知道,如果在一个函数中定义了一个静态变量,在函数结束时该静态变量不被释放,并保留其值。静态数据成员也是这样,它不随对象的建立而分配空间,也不随对象的撤消而释放空间,其值也被保留。静态数据成员在程序被编译时就分配了空间,在程序结束时,才释放空间。 静态数据成员可以被初始化,但只能在类体之外初始化: 数据类型 类名::静态数据成员名 = 初值; 不必在初始化语句中加 static 关键字,不能用参数初始化表初始化静态数据成员: student (int c, char *p, int a) : count(

文档评论(0)

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

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

1亿VIP精品文档

相关文档