- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 类和对象 对象指针和对象引用 数组 常类型 子对象和堆对象 类型转换 6.10 对象指针和对象引用 指向数据成员的指针格式如下:类型说明符类名::*指针名指向成员函数的指针格式如下:类型说明符(类名::*指针名)(参数表)例如,设有如下一个类A: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;//因为c是数据成员,pc是指针,所以要加取地址符 定义一个指向类A的成员函数fun的指针pfun,其格式如下:??? int (A:: *pfun)(int) = A::fun;//fun是成员函数,函数名本身就是地址。 由于类不是运行时存在的对象。因此,在使用这类指针时,需要首先指定A类的一个对象,然后,通过对象来引用指针所指向的成员。例如,给pc指针所指向的数据成员c赋值8,可以表示如下: A a; a.*pc = 8;??? 其中,运算符.*是用来对指向类成员的指针来操作该类的对象的。??? 如果使用指向对象的指针来对指向类成员的指针进行操作时,使用运算符-*。例如:???? A *p = a; //a是类A的一个对象,p是指向对象a的指针。p-*pc = 8; 对比: 指向一般函数的指针的定义格式:??? 类型说明符*指向函数指针名(参数表)指向函数的指针赋值的格式如下:??? 指向函数的指针名=函数名在程序中,使用指向函数的指针调用函数的格式如下:??? (*指向函数的指针名)(实参表》) 不同: 如果是指向类的成员函数的指针要加上相应的对象名和对象成员运算符。 #include iostream.hclass A{ public:??? A(int i) { a=i; }??? int fun(int b) { return a*c+b; }??? int c; private: int a;};void main(){ A x(8); //定义类A的一个对象xint A::*pc; //定义一个指向类数据成员的指针pcpc=A::c; //给指针pc赋值,指向类A的数据成员cx.*pc=3; //用指针方式给类成员c赋值为3int (A::*pfun)(int); //定义一个指向类成员函数的指针pfunpfun=A::fun; //给指针pfun赋值A *p=x; //定义一个对象指针p,并赋初值指向对象xcout(p-*pfun)(5)endl; //用对象指针调用指向类成员函数指针pfun指向的函数} 使用指向数据成员指针的步骤如下: (1)定义指向数据成员指针。 (2)指定指向数据成员指针指向类的哪个数据成员,其格式为: ??指向数据成员指针名=类名::数据成员名 (3)使用指向数据成员指针对某个类的对象的成员进行操作,其引用格式为: ??对象名.*指向数据成员指针名 其中 .* 是成员指针选择运算符。 使用指向成员函数指针的步骤如下: (1)定义指向成员函数的指针。 (2)指定指向成员函数指针指向类的哪个成员函数,其格式为: ??指向成员函数指针名=类名::成员函数名 (3)使用指向成员函数指针对类的某个对象的成员函数进行操作,其引用格式为: ??(对象名.*指向成员函数指针名)(实参表)或??(指向对象的指针 -* 指向成员函数指针名)(实参表) 其中 -* 是成员指针选择运算符。 6.10.2对象指针和对象引用作函数的参数 对象指针作函数的参数??? 使用对象指针作为函数参数要比使用对象作函数参数更普遍一些。因为使用对象指针作函数参数有如下两点好处:??? (1) 实现传址调用。可在被调用函数中改变调用函数的参数对象的值,实现函数之间的信息传递。??? (2) 使用对象指针实参仅将对象的地址值传给形参,而不进行副本的拷贝,这样可以提高运行效率,减少时空开销。??? 当形参是指向对象指针时,调用函数的对应实参应该是某个对象的地址值,一般使用后加对象名。 #include iostream.h//Exa6-14 class M{ public:??? M() { x=y=0; }??? M(int i, int j) { x=i; y=j; }??? void copy(M *m);???
原创力文档


文档评论(0)