- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章 特殊函数和成员(友元static)
5.1 对象成员的初始化 5. 1 对象成员 在类的定义中除包含数据成员和方法(成员函数)外,还可定义对象成员 所谓对象成员是指用其他类的对象作为本类的成员,称为对象成员或成员对象。即:? class A { 类名1 对象成员名1; 类名2 对象成员名2; ... 类名n 对象成员名n; };这里,“类名i”(i=1、2、…、n)是已定义的其它类。通常把含有对象成员的类叫做复合类 A类的构造函数要调用这些对象所在类的构造函数,A类的构造函数定义如下:A:A(参数表0):成员1(参数表1),成员2(参数表2)…… 冒号:后由逗号隔开的项组成成员初始化列表,其中的参数列表中的参数都来自“参数表0”,可以使用任意复杂的表达式,其中可以有函数调用。 对象成员构造函数调用顺序:取决于这些对象成员在类中说明的顺序,与初始化表顺序无关。析构函数的调用顺序与构造函数正好相反。 Class A {int I; Public: A(){I=0;} }; Class B {int I; Public: b(int x){x=i;} }; 一般格式为: 构造函数名(形参表):对象初始化表 用复合类定义对象同其他类定义对象的方式一样只需在对象之后用圆括弧给出实参表即可,此时无需再列出对象初始化表,即:? 复合类类名 对象名(实参表); 例:对于上面的封闭类C,下面的语句: C c1(5, 6, 7.8); 定义了C的对象c1,并进行了初始化:5赋给了c1的对象成员b1的私有成员i,6赋给了c1的对象成员 b2的私有成员i,7.8赋给了c1的私有成员d。 注:只要有一个成员对象需要有构造函数参数,就必须定义复合类的构造函数,因为默认的构造函数已经不能满足复合类的初始化,即使复合类的构造函数的函数体为空,也要定义 初始化const成员和引用成员 初始化const成员和引用成员,必须通过成员初始化列表进行 如: Class example{ Const int num; Int ret; Public: Example(int n,int f):num(n),ret(f) } 5.2 静态成员 5.5.1 静态数据成员 静态数据成员特点:在每个类中只有一个拷贝,由该类的所有对象共同维护和使用,从而实现了同一类的不同对象之间的数据共享。 静态数据成员的定义格式:在定义类的成员时前面加static static 类型标识符 静态数据成员名; 在类的声明中仅仅对静态数据成员进行引用性说明,必须在文件作用域的某个地方用类名限定进行定义,这时也可以进行初始化,格式如下: 类型标识符 类名::静态数据成员名 = 初始值; 静态数据成员不属于任何一个对象,可以通过类名直接对它进行访问,一般的用法是: 类名::静态数据成员名 例5.7 在CStudent类中添加静态数据成员,保存CStudent类的对象总数。 #include iostream.h #include string.h class CStudent { private: int number; char name[10]; static int total; public: CStudent(int xh, char *xm); ~CStudent(); int GetTotal(); int GetNumber(); }; 例5.7 (续) int CStudent::total = 0; void func(); void main() { CStudent s1(10001, AAAAAA ); cout s1.GetNumber() endl; cout s1.GetTotal() endl; CStudent s2(10002, BBBBBB ); cout s2.GetNumber() endl; cout s1.GetTotal() endl; cout s2.GetTotal() endl; func(); cout s1.GetNumber() endl; cout s1.GetTotal() endl; } void func() { CStudent s3(10003, CCCCCC ); cout s3.GetNumber() endl; cout s3.Get
文档评论(0)