欢迎来到天天文库
浏览记录
ID:58670036
大小:2.81 MB
页数:62页
时间:2020-10-05
《第四讲 类和对象(三)ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、8/29/20211面向对象程序设计类和对象对象指针和对象引用数组子对象和堆对象常类型第三讲类和对象(三)1.指向对象的指针和指向类成员的指针指向对象的指针例:已知有一个M类,M*p;//p为指向M类对象的指针指向类数据成员的指针定义格式:类型标识符类名::*指针名指针赋值方式:指针名=&类名::成员名引用方式:对象名•*指针名或指向对象的指针*指针名第四讲类和对象(三)对象指针和引用例:#include“iostream.h”classcl{public:intval;cl(inti){val=i;}};第四讲类和对象
2、(三)对象指针和引用voidmain(){clobj(10);intcl::*date;date=&cl::val;cout<3、第四讲类和对象(三)对象指针和引用2.指向类函数成员的指针定义格式类型标识符(类名::*指针名)(参数表)指针赋值形式指针名=类名::函数成员名引用形式(对象名•*指针名)(实数表列)或(指向对象指针*指针名)(实参表列)第四讲类和对象(三)对象指针和引用例:#include“iostream.h”classcl{private:intval;public:cl(inti){val=i;}intvalue(inta){returnval+a;}}voidmain(){int(cl::*pfun)(int);pfun=cl4、::value;clobj(10);cout<<(obj.*pfun)(5)<<“”;//输出15cl*pc=&obj;cout<<(pc*pfun)(10)<<“”;//输出20}①在使用成员函数指针访问类的成员函数时,应保证参数、返回值以及类都应与所指成员函数相匹配。②成员函数指针本身也可以是类的数据成员第四讲类和对象(三)对象指针和引用3.对象指针和对象引用作函数参数对象指针作函数参数对象指针作为函数参数要比使用对象作函数参数更普通一些。因为使用对象指针作函数参数有如下两点好处:实现传址调用提高运行效率和减5、少时空开销第四讲类和对象(三)对象指针和引用#include“iostream.h”classM{private:inta,b;public:M(){a=b=0;}M(intx,inty){a=x;b=y;}voidprint(){cout<6、2).a+3;(*m2).b=(*m2).b+4;}main(){Ma1(2,3),a2(10,20);fun1(a1)a1.print();fun2(&a2);a2.print();}2,313,24问题:函数调用fun1()和fun2()是否调用拷贝初始化构造函数?第四讲类和对象(三)对象指针和引用对象引用作函数参数前面的例子中把fun1函数重新定义voidfun1(M&m1){m1.a=m1.a+3;m1.b=m1.b+4;}第四讲类和对象(三)对象指针和引用此时,fun1函数的参数为对象M的引用,当我们调用fun17、函数是用a1作实参,即:fun1(a1);a1.print();则输出结果为5,7问题:若类M中存在拷贝初始化构造函数,则发生函数调用fun1(a1)时是否要调用拷贝初始化构造函数?第四讲类和对象(三)对象指针和引用4.this指针this指针是一个隐含于对象的每一个成员函数中的特殊指针,该指针指向正对某个成员函数操作的对象对于类X中的每一成员函数都隐式的定义一个this指针,其定义形式如下:X*constthis第四讲类和对象(三)对象指针和引用当一个对象调用成员函数时,编译程序先将该对象地址赋给this指针,然后再调用8、成员函数。第四讲类和对象(三)对象指针和引用#include“iostream.h”classA{private:inta,b;public:A(){a=b=0;}A(intx,inty){a=x;b=y;}voidcopy(A&aa){if(this==&aa)return;*this=aa;}voi
3、第四讲类和对象(三)对象指针和引用2.指向类函数成员的指针定义格式类型标识符(类名::*指针名)(参数表)指针赋值形式指针名=类名::函数成员名引用形式(对象名•*指针名)(实数表列)或(指向对象指针*指针名)(实参表列)第四讲类和对象(三)对象指针和引用例:#include“iostream.h”classcl{private:intval;public:cl(inti){val=i;}intvalue(inta){returnval+a;}}voidmain(){int(cl::*pfun)(int);pfun=cl
4、::value;clobj(10);cout<<(obj.*pfun)(5)<<“”;//输出15cl*pc=&obj;cout<<(pc*pfun)(10)<<“”;//输出20}①在使用成员函数指针访问类的成员函数时,应保证参数、返回值以及类都应与所指成员函数相匹配。②成员函数指针本身也可以是类的数据成员第四讲类和对象(三)对象指针和引用3.对象指针和对象引用作函数参数对象指针作函数参数对象指针作为函数参数要比使用对象作函数参数更普通一些。因为使用对象指针作函数参数有如下两点好处:实现传址调用提高运行效率和减
5、少时空开销第四讲类和对象(三)对象指针和引用#include“iostream.h”classM{private:inta,b;public:M(){a=b=0;}M(intx,inty){a=x;b=y;}voidprint(){cout<6、2).a+3;(*m2).b=(*m2).b+4;}main(){Ma1(2,3),a2(10,20);fun1(a1)a1.print();fun2(&a2);a2.print();}2,313,24问题:函数调用fun1()和fun2()是否调用拷贝初始化构造函数?第四讲类和对象(三)对象指针和引用对象引用作函数参数前面的例子中把fun1函数重新定义voidfun1(M&m1){m1.a=m1.a+3;m1.b=m1.b+4;}第四讲类和对象(三)对象指针和引用此时,fun1函数的参数为对象M的引用,当我们调用fun17、函数是用a1作实参,即:fun1(a1);a1.print();则输出结果为5,7问题:若类M中存在拷贝初始化构造函数,则发生函数调用fun1(a1)时是否要调用拷贝初始化构造函数?第四讲类和对象(三)对象指针和引用4.this指针this指针是一个隐含于对象的每一个成员函数中的特殊指针,该指针指向正对某个成员函数操作的对象对于类X中的每一成员函数都隐式的定义一个this指针,其定义形式如下:X*constthis第四讲类和对象(三)对象指针和引用当一个对象调用成员函数时,编译程序先将该对象地址赋给this指针,然后再调用8、成员函数。第四讲类和对象(三)对象指针和引用#include“iostream.h”classA{private:inta,b;public:A(){a=b=0;}A(intx,inty){a=x;b=y;}voidcopy(A&aa){if(this==&aa)return;*this=aa;}voi
6、2).a+3;(*m2).b=(*m2).b+4;}main(){Ma1(2,3),a2(10,20);fun1(a1)a1.print();fun2(&a2);a2.print();}2,313,24问题:函数调用fun1()和fun2()是否调用拷贝初始化构造函数?第四讲类和对象(三)对象指针和引用对象引用作函数参数前面的例子中把fun1函数重新定义voidfun1(M&m1){m1.a=m1.a+3;m1.b=m1.b+4;}第四讲类和对象(三)对象指针和引用此时,fun1函数的参数为对象M的引用,当我们调用fun1
7、函数是用a1作实参,即:fun1(a1);a1.print();则输出结果为5,7问题:若类M中存在拷贝初始化构造函数,则发生函数调用fun1(a1)时是否要调用拷贝初始化构造函数?第四讲类和对象(三)对象指针和引用4.this指针this指针是一个隐含于对象的每一个成员函数中的特殊指针,该指针指向正对某个成员函数操作的对象对于类X中的每一成员函数都隐式的定义一个this指针,其定义形式如下:X*constthis第四讲类和对象(三)对象指针和引用当一个对象调用成员函数时,编译程序先将该对象地址赋给this指针,然后再调用
8、成员函数。第四讲类和对象(三)对象指针和引用#include“iostream.h”classA{private:inta,b;public:A(){a=b=0;}A(intx,inty){a=x;b=y;}voidcopy(A&aa){if(this==&aa)return;*this=aa;}voi
此文档下载收益归作者所有