第七讲 静态与const成员.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七讲 静态成员 const成员 * (3)中的访问方法,针对的是public static,若不是public则还是需要用成员函数访问。 * 声明的时候,并没有分配内存。 在类的外面进行定义的时候才分配。 * * 与静态数据成员不同,静态成员函数的作用不是为了对象之间的沟通,而是为了能处理静态数据成员。 前面曾指出: 当调用一个对象的成员函数(非静态成员函数)时,系统会把该对象的起始地址赋给成员函数的this指针。而静态成员函数并不属于某一对象,它与任何对象都无关,因此静态成员函数没有this指针。既然它没有指向某一对象,就无法对一个对象中的非静态成员进行默认访问(即在引用数据成员时不指定对象名)。 可以说,静态成员函数与非静态成员函数的根本区别是: 非静态成员函数有this指针,而静态成员函数没有this指针。由此决定了静态成员函数不能访问本类中的非静态成员。 * 请思考: 如果不将average函数定义为静态成员函数行不行?程序能否通过编译?需要作什么修改?为什么要用静态成员函数?请分析其理由。 但是在C++程序中最好养成这样的习惯: 只用静态成员函数引用静态数据成员,而不引用非静态数据成员。这样思路清晰,逻辑清楚,不易出错。 * 不为const数据成员提供成员初始化值是个语法错误。 常量型成员(const对象和const‘变量’)要用成员初始化值的语法初始化,而不能用赋值语句。 例如: class Increment{ public: Increment(int c=0,int I = 1); void print() const; private: int count; const int increment; }; Increment::Increment (int c, int i) :increment(i) { count=c; } Int main() { Increment value(10,5); } * Const成员函数不能修改对象,否则有语法错误。 定义调用同一个类实例的非const成员函数的const成员函数是个语法错误。 构造函数和析构函数声名为const是个语法错误。因为他们要修改对象。初始化,删除清理等。 * const关键词可以参与区分重载函数, 编译器根据对象是否为const自动选择所用的从在版本. * d1对象初始化后将不能在改变了。一个对象被定义成const后,因为const对象是不能被修改的,(const对象不能用赋值语句修改,因此要初始化) 而C++编译器不能判断哪个函数将对数据成员进行修改。因此,一个对象被定义成const以后。则此对象中的所有成员函数都会被禁止。 为了能够使用const对象中不改变数据成员值的成员函数,只要在定义和说明成员函数时,加上const关键字即可。 Const对象的构造函数和析构函数不需要声明为const. * * * 类的共享机制 对象1 对象2 对象3 数据1 数据2 数据1 数据2 数据1 数据2 函数1 函数2 静态成员 数据3 函数3 成员 函数 class X { char ch ; static int s; …... }; int X :: s = 0 ; object A , B , C , D ; X B ; char ch ; X C ; char ch ; X D ; char ch ; X A ; char ch ; static int s ; 静态成员 静态类成员数据 静态数据成员的使用方法如下: 1)静态数据成员的定义与一般数据成员相似, 但前面要加上static关键词。 2)静态数据成员的初始化与一般数据成员不同, 静态数据成员初始化的格式如下: 类型 类名::静态数据成员 = 值; 3)在引用静态数据成员时采用格式: 类名::静态数据成员 对象名. 静态数据成员 class A {… static int var; //在类的内部声明 … }; int A::var = 1; //在类的外部定义 静态类成员数据 静态和自动成员变量 对象1 对象2 对象3 automatic数据 数据2 数据1 数据2 数据1 数据2 静态数据 数据4 automatic数据 数据1 automatic数据 数据3 //例

文档评论(0)

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

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

1亿VIP精品文档

相关文档