标准C++程序设计第8章 静态成员、友员与成员指针.ppt

标准C++程序设计第8章 静态成员、友员与成员指针.ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 静态成员、友员与成员指针 一个类的属性或方法可以采用static进行修饰,这样的成员称为静态成员。 8.1 静态成员 8.1.1 静态属性 1. 静态属性是只在对象之间公用的“全局变量” 函数共用一份信息,采用全局变量来实现。 类的对象共用一份信息,采取的方法是将其定义为类的静态属性。 2. 静态属性的定义与初始化 static int no; //类型任意 与普通属性不同的是,静态属性必须在类定义之外进行定义性声明,包括初始化,如: int PointX::no = 0; //仍使用“类名::”作为限定 声明不会将no的私有属性变成公开 静态属性声明也是对该属性初始化的唯一场所和时机,在没有提供初始值时,系统将其清0。 类定义外的静态属性声明不能再加static关键字。 在.h和.cpp文件中,静态属性的定义性声明语句应置于.cpp文件中,所有的类方法实现之外。 静态属性是属于类而不是对象的。(sizeof(PointX)的值可验证) 静态属性在程序运行开始时初始化 3. 静态属性的表示方法 类名::静态成员名 如PointX::no class PointX { int x, y; public: static int no; PointX(int x1, int y1):x(x1), y(y1){ no++; } }; int PointX::no = 0; int main( ) { PointX p1(1,1), p2(2,3), p3(3,1); cout << PointX::no; } 8.1.2 静态方法 class PointX { int x, y; static int no; //私有静态成员 public: PointX(int x1, int y1):x(x1), y(y1){ no++; } static int getNo(){ return no; } //静态方法 static void increaseNo() { no++; } //静态方法 }; int PointX::no = 0; int main( ) { PointX p1(1,1), p2(2,3), p3(3,1); cout << PointX::getNo(); PointX::increaseNo(); cout << PointX::getNo(); } ⑴静态方法中不能出现任何非静态成员。 这是因为非静态成员要依赖对象才能存在和使用。 但非静态方法中可以使用静态属性。 ⑵静态方法没有缺省的this指针 因为仅借助类名调用静态方法时显然不会有对象地址传给this。 这是静态方法与普通方法的最重要的内在区别。 8.2 友员 类是经过封装的“黑盒”,普通函数不能访问类的私有成员。 不妨将一个对象看成是一本私人的日记,通常是不允许外人去翻看的,但朋友就可能享有一定的特权,看到日记的内容。如果希望一个普通函数能够直接访问类的成员,也可以将其定义为类的“朋友”。因为这个普通函数并不是类的成员,故称为类的友员。 1. 使用普通函数作为类的友员 如果要将某个普通函数作为类的友员,必须在类定义中进行声明,形式为: class X { ... public: friend type 友员函数名(形式参数表); }; #include <iostream> using namespace std; class A { int m; //类的私有成员 public: friend void setm(A& to, int m1); }; void setm(A& to, int m1) //普通函数,不属于类 { to.m = m1; //类的私有成员对友员也是公开的 } int main() { A to; setm(to, 10); } 2. 使用友员时应注意的问题 将一个普通函数定义为类的友员的目的是使其能直接访问类的非公开成员,因此,友员一般要有类对象、类对象引用或类指针为参数(通常是引用),以使友员能借助它们引用类的成员。 那么,究竟是什么使我们甘冒破坏类的封装性的危险而将普通函数定义成类的友员呢?最主要的原因是效率。 使用友员还有一些原因,如可以使运算符重载更加灵活等,但友员并不是一种必需的技术。 3. 向前引用类定义 如果一个类使用在前而定义在后,需要先进行类声明,语法形式如下: class

文档评论(0)

132****9295 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档