chapter05 类和对象.pptVIP

  • 1
  • 0
  • 约9.28千字
  • 约 49页
  • 2016-09-21 发布于江西
  • 举报
chapter05 类和对象

5.3 类的成员 5.3.3 静态成员 在类作用域中,关键字static也可以用于修饰一些成员(包括数据成员和成员函数),这样的成员被称为“静态成员(static member)”。与普通静态对象相比,类的静态成员具有完全不同的含义。 5.3 类的成员 静态数据成员 定义静态数据成员的语法可以用下例演示: class Rectangle //简化版 { public: static int counter; //all objects share this static data member //other members }; 5.3 类的成员 前面的例子只是声明了静态成员,而它的存储需要在类定义外额外分配: int Rectangle::counter = 0; 其中,初始化是可选项。但在一般情况下都是需要的。 5.3 类的成员 假设定义了三个对象: Rectangle r1, r2, r3; 图5-1形象地说明了类的静态数据成员和普通数据成员的关系。 5.3 类的成员 静态数据成员属于类,而不属于对象。可以这样来理解这句话的含义:静态数据成员的存储定义是独立于类的,所以在所有类对象被创建之间它就已经存在了。 在这个意义上,在类对象不存在的情况下,也可以访问到类的静态成员。其访问方式为: 类名::静态公有数据成员 这种访问方式不需要类对象的参与。而在类的内部,静态数据成员可以被所有成员直接访问而没有任何限制。 例5-1 类的静态数据成员(ex5-1.cpp) 但是,静态数据成员仍是类的一部分,所有受到了访问控制的严格约束,只有具有公共访问属性的静态数据成员才能在类外被访问到。 5.3 类的成员 2. 静态成员函数 类的成员函数也能被说明为静态的。与静态数据成员一样,静态成员函数属于类而不是某个类对象。因此,在类外调用一个公有静态成员函数,不需要指明对象或指向对象的指针。具体方式为: 类名::静态公有成员函数名(参数列表) 而在类内,采用直接调用静态成员函数(包括公有的和私有的)的方式。 例5-2 类的静态成员函数(ex5-2.cpp) 5.3 类的成员 一般使用静态成员函数来访问静态数据成员。 与其它非静态成员函数一样,所有类对象共享静态成员函数的代码。但二者有一个非常重大的不同:当通过类对象调用某个非静态成员函数时,该成员函数“知道”自己工作在哪个对象上,因此能得到正确的结果;而静态成员函数是不属于类对象的,因此它“不知道”自己在操作哪个对象。 例5-3在静态成员函数中访问非静态成员(ex5-3.cpp) 5.4 对象的初始化 与简单对象一样,新生成的对象没有初始状态,即这个对象的数据成员的值都是未定的。因此,为了避免运行时错误,应该对其进行初始化工作。从理论上讲,类的所有数据成员都应该被初始化。 class Rectangle { public: string name = Rectagnle; ? private: int width = 1, height = 1; //other members }; 5.4 对象的初始化 解决方法:为类提供一个初始化函数来完成操作。 在定义了一个对象后,应立即调用它的初始化函数。 如果类拥有静态数据成员,那么这些成员的初始化工作最好是在定义静态成员的存储时完成,而不应该在初始化函数中进行。 如果类还拥有一些特殊的成员,例如常量和引用成员,那么它们的初始化只能借助于类的构造函数完成。 实际上,初始化函数并非是一种好的模式。因为可以肯定的是,一些程序员会因各种原因忘记调用初始化函数,从而导致不正确的结果。因此,将初始化工作自动化是非常必要,这也要借助于类的构造函数。 5.5 C++中的类 除了class外,C++还将从C继承过来的struct和union视为类,不过,它们拥有特别的特性。 结构 struct 结构体和类的差别在于缺省访问控制描述时,类的成员都是私有的,而结构体的成员则都是公有的。 2. 联合 union 联合体的所有成员只能为公有成员。 一般情况下,C++程序员都用class来定义对象的抽象形式,而用C的方式来使用结构体,就是不为它定义任何成员函数。 虽然C++赋予联合体更大的能力及灵活性,并不意味必须以这种方式来使用它们。如果仅需C式的联合体,最好以C的方式使用它。 5.6 数据封装和信息隐藏的意义 一个类的定义实现了数据封装,它具有如下可见性: 类外不可见:(即封装起来的部分) 私有段数据 私有段函数原型 私有段函数和公有段函数的实现 类外可见:(即一个类向外提供的部分) 公有段数据 公有段函数原型 5.6 数据封装和信息隐藏的意义 类类型符合抽象原则。抽象是指对于一个系统的简化的描述。对于使用系统的人员,不会去关心该系统的组成和工作

文档评论(0)

1亿VIP精品文档

相关文档