欢迎来到天天文库
浏览记录
ID:43630014
大小:458.53 KB
页数:5页
时间:2019-10-11
《面向对象程序设计最终作业》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、面向对象程序设计最终作业学生所在学院:理学院学生所在班级:计算数学11-1学生姓名:王朝阳学生学号:110108010011指导教师:聂栋栋教务处2013年12一、对象指针(1)对象指针的定义C++语言允许程序员定义对象指针变量,存放某一个已创建的对象地址,即指向该对象。对指针变量的定义形式是:类名*变量名;对象指针的定义形式与普通指针极为相似,只不过指针的类型是类而已。学习对象指针的关键在于通过对象指针操作所指对象的方法。借助于->运算符,可以通过对象指针间接访问所指对象的外部接口,其一般形式是:对象指针->公有成员函数名(实参表);说明:->运算符在
2、执行时分为两个步骤:首先间接访问所指对象,然后访问对象的成员。例如:pointa,*p;//定义一个普通对象a和一个对象指针变量pp=&a;//p指向ap->display();//激活对象a的display方法在对象指针p已指向对象a的前提下,p->display()的效果与a.display()是完全等价的。前者是间接访问,后者是直接访问。p->display()可以理解为(*p).display(),即先通过*运算符间接访问所指对象a,再通过成员运算符(.)访问对象的公有成员函数。(2)this指针的应用C++语言提供this指针,它是一个特殊的对
3、象指针,指对象自身。this指针被隐含的用来访问对象的数据成员和成员函数,例如在point类的成员函数display中,语句cout<<"x="<<"y="<x<<"y="<y<4、员函数move,其原型是voidmove(intxx,intyy);成员函数move的原型就是voidmove(point*this,intxx,intyy);。例如a.move(1,1);,C++编译器自动把该语句转换为move(&a,1,1);,通过行实结合,this指针就指向了对象a,使得成员函数move最终找到调用它的对象a。说明:piont类的成员函数move中的语句this->x=this->x+x;,在这里this指针是不能省略的。形参x和数据成员x的名称相同,按照作用域屏蔽的规则,在成员函数move中单独出现的x一律当做形参x。为了标识数5、据成员x的身份,使用this->x的形式,表明该x不是形参,而是对象的数据成员x。在C++程序中还有一处用到了this指针,对赋值运算符(=)重载时,为了保留它能够连续赋值的特点,需要运算符重载函数返回对象自身。这是可以书写语句return(*this);,而*this就是对象自身。二、成员指针对象的数据成员在内存顺序存放,这些成员具有数据类型,分别占据一定的空间,也拥有自己的地址。因此不仅可以定义对象指针,还可以定义指向成员的指针。指向成员的指针既能够指向对象的数据成员,也可以指向对象的成员函数。其语法形式是:类型类名::*成员指针名;//定义指向成员6、的指针类型(类名::*成员指针名)(形参表);//定义指向成员函数的指针如何通过成员指针访问所指成员呢?C++语言提供了两个用于成员指针访问的运算符:.*和->*,均为双目运算符(即需要两个操作数)。.*运算符的左操作数是对象,右操作数是成员指针;->*运算符的做操作数是对象指针,右操作数是成员指针。以指向成员函数的成员指针为例,使用形式是:(对象.*成员指针)(实参表);(对象指针->*成员指针)(实参表);三、例题应用1、程序代码#includeclassM{public:M(){x=y=0;}M(inti,intj){x=i7、;y=j;}voidcopy(M*m);voidsetxy(inti,intj){x=i;y=j;}voidprint(){cout<x;y=m->y;}voidfun(Mm1,M*m2);voidmain(){Mp(5,7),q;q.copy(&p);fun(p,&q);p.print();q.print();}voidfun(Mm1,M*m2){m1.setxy(12,15);m2->setxy(22,25);}输出结果为:5,724,28、2、程序运行截图
4、员函数move,其原型是voidmove(intxx,intyy);成员函数move的原型就是voidmove(point*this,intxx,intyy);。例如a.move(1,1);,C++编译器自动把该语句转换为move(&a,1,1);,通过行实结合,this指针就指向了对象a,使得成员函数move最终找到调用它的对象a。说明:piont类的成员函数move中的语句this->x=this->x+x;,在这里this指针是不能省略的。形参x和数据成员x的名称相同,按照作用域屏蔽的规则,在成员函数move中单独出现的x一律当做形参x。为了标识数
5、据成员x的身份,使用this->x的形式,表明该x不是形参,而是对象的数据成员x。在C++程序中还有一处用到了this指针,对赋值运算符(=)重载时,为了保留它能够连续赋值的特点,需要运算符重载函数返回对象自身。这是可以书写语句return(*this);,而*this就是对象自身。二、成员指针对象的数据成员在内存顺序存放,这些成员具有数据类型,分别占据一定的空间,也拥有自己的地址。因此不仅可以定义对象指针,还可以定义指向成员的指针。指向成员的指针既能够指向对象的数据成员,也可以指向对象的成员函数。其语法形式是:类型类名::*成员指针名;//定义指向成员
6、的指针类型(类名::*成员指针名)(形参表);//定义指向成员函数的指针如何通过成员指针访问所指成员呢?C++语言提供了两个用于成员指针访问的运算符:.*和->*,均为双目运算符(即需要两个操作数)。.*运算符的左操作数是对象,右操作数是成员指针;->*运算符的做操作数是对象指针,右操作数是成员指针。以指向成员函数的成员指针为例,使用形式是:(对象.*成员指针)(实参表);(对象指针->*成员指针)(实参表);三、例题应用1、程序代码#includeclassM{public:M(){x=y=0;}M(inti,intj){x=i
7、;y=j;}voidcopy(M*m);voidsetxy(inti,intj){x=i;y=j;}voidprint(){cout<x;y=m->y;}voidfun(Mm1,M*m2);voidmain(){Mp(5,7),q;q.copy(&p);fun(p,&q);p.print();q.print();}voidfun(Mm1,M*m2){m1.setxy(12,15);m2->setxy(22,25);}输出结果为:5,724,2
8、2、程序运行截图
此文档下载收益归作者所有