第三章类和对象的进一步讨论.pptVIP

  1. 1、本文档共109页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章类和对象的进一步讨论

第三章 关于类和对象的进一步讨论 静态变量 在变量声明前面加上关键字static,就使该变量成为静态的。 对于非静态变量,每个类对象都有自己的拷贝;而静态变量对每个类只有一个拷贝,静态变量可被该类的所有对象共享访问。 还有,静态变量即使在它所属于的函数执行完后还是保留他们的值,这意味着:静态变量在整个程序内一直保留着它的值。 静态变量必须在其类体内声明,但不能在类体内初始化,只能在成员函数或类定义之外(类体外)被初始化。 静态变量的声明和初始化,举例 : class SExample { public: static int svar; //静态变量声明 … … } int SExample::svar = 0; //静态变量初始化 ① 在类的成员函数中可以直接访问该类的静态变量而不必使用成员访问操作符: SExample::cout( ) { svar = svar+1; cout”Now,The total is :”svar; } ② 但是,在非成员函数中我们必须以以下两种方式之一访问静态变量: a. 可以使用成员访问操作符: int SExample::svar = 0; int main() { SExample s1; s1.svar = 1; } b. 因为类静态变量只有一个拷贝,所以不一定要通过对象或指针来访问,访问静态变量的另一种方法是用被类名限定修饰的名字直接访问它: int SExample::svar = 0; int main() { SExample::svar = 1; } 当不通过类的成员访问操作符访问静态变量时,必须指定类名以及紧跟其后的域操作符“ :: ”。 静态函数 静态函数的声明就是在类体中的函数声明前加上关键字static。 因为静态成员在对象创建之前就已经存在了,所以,静态函数只能访问静态变量,不能够访问非静态变量。 静态函数声明举例: class SExample { public: static int svar; static void display() //静态函数声明 { coutThe static variable is :svar; } }; int SExample::svar=0; 与静态变量同理,也有两种方式访问静态函数。 a. 可以用成员访问操作符——点“ . ” 和箭头“ - ”,为一个类对象或指向类对象的指针调用静态函数。 b. 也可以用类限定修饰名直接访问或调用静态函数,而无需声明类对象。 举例: SExample::display(); //访问方式a SExample s; s.display(); //访问方式b 6. 静态成员 ( Static Members ) 静态数据成员 在类作用域中声明,在类定义作用域中定义(一般是在main函数启动之前定义),每个该类对象都共享.描述任何对象的共性状态. 在多文件程序结构中,一般放在类的实现编译单元中. 例如: class Student{ string name; public: static int num; void set(string str){ name = str; ++num; } }; int Student::num = 0; //静态数据成员初始化 int main(){ Student s1, s2; s1.set(Smith); s2.set (“John”) ; couts1.num“\n”; // 可行,非标准 coutStundent::num“\n”; // 访问静态成员 } 静态成员函数 调用时,不捆绑对象,所以,不能直接操作对象和其成员,若需访问该类对象,必须以参数传递之. 静态成员函数一般设计为公有的,以访问私有静态数据成员为目的. 调用方式是以类名加域操作符::后跟静态成员函数. 7. 友元 ( Friends ) 友元的作用:弥补访问控制符的不足,在外部频繁操作对象(即调用成员函数),引起调用开销的增加时,可以通过直接访问对象的成员(而不是调用成员函数),而使性能明显提高. 例如:矩阵乘向量函数 friend Vector multiply(Matrix m, Vector v){ Vector r ( v.size(), 0); // 整型向量初始值0 r.set ( m.szl ); // 直接访问私有数据成员szl for (

文档评论(0)

118books + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档