- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 第二部分 C++面向对象程序设计 第七章 类和对象(二) 本章课件制作:刘红利 本章内容 静态成员 友元 对象与指针 常类型 名空间 类模板 类型转换 7.1 静态成员 静态成员 静态成员是同一个类中所有对象共享的成员,而不是某一个对象的成员。静态成员包括静态数据成员和静态成员函数。? 1. 静态数据成员 静态数据成员必须在类体内说明,并且必须在任何类体和函数之外定义一次。 定义: 类型 类名::静态数据成员; //缺省初始值为0 类型 类名::静态数据成员=初始值; 静态数据成员的说明: static 类型名 静态数据成员名; 例 1:静态数据成员的使用示例。 程序输出结果: obj1 count=1 obj2 count=2 obj1 count=2 当前对象计数器值为:2 obj1 count=3 obj3 count=3 obj2 count=3 当前对象计数器值为:2 obj3 count=3 当前对象计数器值为:3 2. 静态成员函数 static成员函数没有this指针,因此,一般使用static成员函数来访问static数据成员; 静态成员函数是一个类的静态成员。静态成员函数没有this指针,因此,一般使用静态成员函数来访问静态数据成员; 若需要引用类的非静态数据成员,则要通过对象的引用。静态数据成员的使用方法和一般成员函数类似。 静态成员函数的调用格式: 类名::静态成员函数名(参数表); 程序输出结果: count=1 count=2 例 1:静态成员函数示例。 程序输出结果: A=5 B=15 A=10 B=15 例 2:静态成员函数示例。 7.1 友元函数与友元类 友元 友元是一种定义在类的外部的普通函数,但它需要在类体内进行说明 友元提高程序的运行效率,破坏了类的封装性和隐藏性 友元包括友元函数和友元类 友元函数的说明 在类的定义中,用以下格式说明友元函数: friend 类型 友元函数名(参数表); 友元函数与普通函数的不同之处在于:友元函数可以访问对象的私有成员,而一般函数不行。 友元函数不能直接访问类的私有成员。它只能通过对象访问对象的私有成员。 1. 友元函数 程序输出结果: (2+1.5i)+(3-6i)=(5-4.5i) 例 1:用友元函数实现两个复数的加法运算。 程序输出结果: 男孩路路的年龄是13 女孩萍萍的年龄是15,帽子是红颜色的 例 2:一个类的成员函数作为另一个类的友元函数。 友元类 当一个类为另一个类的友元类时,该类的所有成员函数均作为另一个类的友元函数。 友元类的说明 在类的定义中,用以下格式说明友元函数: friend class 友元类名; 可以把一个类的成员函数说明为类的友元,而不把整个类说明为友元。 友元的使用降低了数据的隐藏性,对它不能滥用。 2. 友元类 程序输出结果: x=5,y=6 x=40,y=6 x=9,y=15,yy=8 例 1:友元类使用示例。 7.3 对象与指针 1. 对象指针和对象引用 指向类的公有成员的指针 指向公有数据成员的指针格式如下: 类型名 类名::*指针名; 类型名 类名::*指针名=类名::公有数据成员名; 指向公有成员函数的指针格式如下: 类型名 (类名::*指针名)(实参表); 类型名 (类名::*指针名)(实参表)=类名::公有成员函数名; class A{ ??? public: ?????? int fun (int b) { return a * c + b;} A(int i) {a = i;} int c; private: int a; }; 例 ??? 定义一个指向类A的数据成员c的指针pc,其格式如下: ??? int A::*pc = A::c; ??? 定义一个指向类A的成员函数fun的指针pfun,其格式如下: ??? int (A::*pfun)(int)=A::fun; ? 给pc指针所指向的数据成员c赋值8,可以表示如下: A a; a.*pc = 8; 使用指向对象的指针来对指向类成员的指针进行操作: A *p = a; p- *pc = 8; 对象指针和对象引用作函数参数 实现传址调用,可在被调用函数中改变调用函数的参数对象的值,实现函数之间的信息传递 使用对象指针实参仅将对象的地址值传给形参,而不进行副本的拷贝,这样可以提
文档评论(0)