C++常成员和对象指针.ppt_第1页
C++常成员和对象指针.ppt_第2页
C++常成员和对象指针.ppt_第3页
C++常成员和对象指针.ppt_第4页
C++常成员和对象指针.ppt_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、面向对象程序设计(C+),第6章常成员和对象指针,6.1 常数据成员,在类的成员定义中,使用修饰符const说明的数据成员称为常数据成员。常数据成员必须初始化,并且不能被修改。常数据成员是通过构造函数的成员初始化列表进行初始化的。,6.1 常数据成员,class A public: A(int i); void Print(); const int ,#include void main() A a1(50),a2(30); a1.Print(); a2.Print(); ,A:A(int i):a(i), r(a) 构造函数A带有一个int型参数i,冒号后面是一个数据成员初始化列表,包含两个

2、初始项,用逗号分隔。其中a(i)表示用i的值初始化常数据成员a, r(a)表示用a初始化常数据成员r。,50,15,50 30,15,30,6.2 常对象,数据成员值在整个生存期内不能被改变的对象为常对象,常对象必须进行初始化,而且不能被更新。声明的语法形式为: 类名 const 对象名 或 const 类名 对象名 class A public: A (int i, int j) x=i; y=j void setValue(int i, int j) x=i; y=j private: int x, y; ; A const a(3,4); /OK A b; b.setValue(1,2)

3、; /OK A const b; b.setValue(1,2); /Error! 语法规定:不能通过常对象调用普通成员函数。,6.3 常成员函数,使用const关键字说明的成员函数: 类型说明符 函数名(参数表) const; 说明: const是函数类型的一个组成部分,因此在实现部分也要有const关键字。 常成员函数不能更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。这样可以保证在常成员函数中不会修改数据成员的值。 如果将一个对象说明为常对象,则通过该常对象只能调用其常成员函数,而不能调用其它成员函数。这是C+从语法机制上对常对象的保护,也是常对象唯一的对外接口方式。

4、 const关键字可以用于对重载函数的区分。,6.4 对象指针,1. 指向对象的指针 同基本数据类型的变量一样,每个对象在声明之后会在内存中分配一定的空间。既可以通过对象名,也可以通过对象的地址来访问对象。对象所占的内存空间只用于存放数据成员,函数成员不在每个对象中都存储副本。 对象指针是用于存放对象地址的变量,遵循一般指针变量的各种规则。声明对象指针的一般形式为: 类名 *对象指针名 例如:Point p1,*p_Point; p_Point= 使用对象指针可以访问对象的公有成员: 对象指针名成员名 对象指针在使用前,应该先进行初始化,让它指向一个已经声明过的对象,然后再使用。,6.4 对象

5、指针,2.指向对象的常指针和指向常对象的指针 (1)指向对象的常指针 * const 该指针的地址是常量不能改变,但该指针所指向的对象可以改变。 Date d1,d2; Date * const pd= /Error 指向对象的常指针是将一个指针固定地同一个对象相关联,即始终指向一个对象,不能改变指针所指对象。,6.4 对象指针,(2).指向常对象的指针 指向常对象的指针是指这个指针所指向的对象是常对象。声明格式如下: const *=; const Date d1(2005,7,1); const Date *pd= 对指向常对象的指针赋值可以是常对象的地址,也可以是非常对象的地址。试图通过

6、指向常对象的指针来改变所指对象的数据成员值是不允许的。,6.4 对象指针,(2).指向常对象的指针 如果有一个常对象,指向它的指针一定要用指向常对象的指针,指向一般对象的指针是不可以的。 指向常对象的指针可以用一般对象地址进行赋值,但不能通过该指针改变对象值。 使用指向常对象指针引用的成员函数应该是常成员函数。 指向常对象的指针的地址值是可以改变的。 指向常对象的指针可以作为函数参数,这样能保证不会在被调用函数中通过指针改变调用函数中的实参值。,6.5 成员指针,1. 指向类的非静态成员的指针 类的成员本身也是一些变量、函数或对象,可以将它们的地址存放在指针变量中,从而能够通过这些指针访问对象

7、的成员。 指向对象成员的指针使用前也要先声明,再赋值,然后引用,因此首先要声明指向该对象所在类的成员的指针。注意,通过指向成员的指针也只能访问公有成员。 (1)指向公有数据成员的指针 指向公有数据成员的指针的声明形式为: 类型说明符 类名:*指针名; 声明了指向成员的指针之后,需要对其进行赋值,确定它指向哪一个成员。对数据成员指针赋值的一般语法形式为: 指针名= . int A:*pa=,6.5 成员指针,对于普通变量,用“ . int A:*pa=,void main() A obja; A *pObja= ,6.5 成员指针,(2) 指向公有成员函数的指针 指向公有成员函数的指针的声明形式

8、为: 类型说明符 (类名:*指针名)(参数表) 成员函数指针在声明之后要对其进行赋值: 指针名=类名:函数成员名; 普通函数的函数名就是其入口地址,将入口地址赋给函数指针便可以通过指针调用函数。类的成员函数虽然不在每个对象中保存副本,但语法规定必须通过对象来调用类的非静态成员函数,因此经过上述赋值之后的成员函数指针还不能用来调用成员函数,而是需要首先声明类的对象,然后用以下形式的语句利用指针调用成员函数: (对象名. *类成员指针名)(参数表) (对象指针名-*类成员指针名)(参数表) !注意:成员函数指针在声明、赋值和使用的过程中的返回值类型和参数一定要匹配。,class A public:

9、 int fun(int); . int (A:*pfa)(int)=A:fun;,void main() A obja; A *pObja= ,void main() Point A(4,5); Point *pa; pa= ,/类声明 class Point public: Point(int xx=0,int yy=0) X=xx;Y=yy;pub=10; int GetX()return X; int GetY()return Y; int pub; /公有数据成员 private: int X,Y; ;,6.5 成员指针,2. 指向类的静态成员的指针 类的静态成员可以通过普通指针指向和访问。 例: /类声明 class Point public: Point(int xx=0,int yy

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论