欢迎来到天天文库
浏览记录
ID:50019558
大小:187.00 KB
页数:57页
时间:2020-03-07
《C++面向对象程序设计 教学课件 作者 张德慧 周元哲 主编第4章 进一步学习类和对象.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《C++面向对象程序设计》教学内容第1章C++概述第2章类和对象第3章面向对象程序设计概述第4章进一步学习类和对象第5章堆与复制构造函数第6章继承性:派生类第7章运算符重载第8章虚函数和多态性第9章模板第10章类库和C++的标准模板库STL第11章输入输出流第12章异常处理第4章进一步学习类和对象4.1对象数组4.2指向对象的指针4.3this指针4.4对象的赋值4.5对象作为函数参数4.6从函数返回对象4.7类的静态成员4.8类的友元4.1对象数组(Objectarrays)定义:类名数组名[元素个数];例如:StudentaSA[10];//一个学
2、生类对象数组通过下标访问方法:数组名[下标].成员名;例如:aSA[j].print();对象数组初始化数组中每一个元素对象被创建时,系统都会调用构造函数类初始化该对象。通过初始化列表赋值。例:LocationA[2]={Location(1,2),Location(3,4)};如果没有为数组元素指定显式初始值,数组元素使用缺省值初始化(调用缺省构造函数)。当数组中每一个对象被删除时,系统都要调用一次析构函数。数组元素所属类的构造函数没有自定义构造函数时,则采用缺省构造函数。各元素对象的初值要求为相同的值时,可以定义出具有缺省形参值的构造函数。各元素对
3、象的初值要求为不同的值时,需要定义带形参(无缺省值)的构造函数。如果需要定义动态数组,需要一个无参构造函数。对象数组例子#includeclasssamp{inta,b;public:samp(intn,intm){a=n;b=m;}intget_a(){returna;}intget_b(){returnb;}};对象数组例子(续)main(){sampob[4][2]={samp(1,2),samp(3,4),samp(5,6),samp(7,8),samp(9,10),samp(11,12),samp(13,14),sam
4、p(15,16),};inti;对象数组例子(续)for(i=0;i<4;i++){cout<5、向下一个对象;当对象指针减少的时候,它指向前一个对象。对象指针的用法intmain(){Circlec1(3),*pc;//pc为指向圆形Circle类对象的指针pc=&c1;//将对象c1的地址赋给对象指针pc,使其指向圆形对象c1cout<GetArea()<6、i<4;i++,sp++)sp->print();//指针加1后,指向下一个对象sp=sp-3;//指针减3后,指针向前移动三个对象sp->modify(87);sp->print();return0;}4.3this指针对象是由数据和操作构成的一个整体,即使同一类的不同对象的操作也是相互独立的,各占不同的内存空间。但是,在C++实现中,这种处理方案太浪费内存空间。同类的对象能否共享该类成员函数的同一个实例呢?myBirthday.set(31,12,1997);nationalDay.set(1.10,1949);voidDate::Set(intD7、,intM,inty){day=D;month=M;year=Y;}那么,此时计算机怎么能区分该函数是作用在哪个对象上呢?解决方案C++在编译时,自动在每个成员函数中的第一个参数位置增加:X*constthis;当对象调用该函数时,编译器自动将该对象的指针作为实参传递给相应的函数,这样就可解决上述问题:voidDate::Set(Date*constthis,intD,intM,intY){this->day=D;this->month=M;this->year=Y;}注:程序员不能将this指针的说明写在函数中C的结构体struct与C++的stru8、ct的比较C语言的结构体中数据与操作是分离的在C++语言中将数据与操作封装在一个结构体中str
5、向下一个对象;当对象指针减少的时候,它指向前一个对象。对象指针的用法intmain(){Circlec1(3),*pc;//pc为指向圆形Circle类对象的指针pc=&c1;//将对象c1的地址赋给对象指针pc,使其指向圆形对象c1cout<GetArea()<6、i<4;i++,sp++)sp->print();//指针加1后,指向下一个对象sp=sp-3;//指针减3后,指针向前移动三个对象sp->modify(87);sp->print();return0;}4.3this指针对象是由数据和操作构成的一个整体,即使同一类的不同对象的操作也是相互独立的,各占不同的内存空间。但是,在C++实现中,这种处理方案太浪费内存空间。同类的对象能否共享该类成员函数的同一个实例呢?myBirthday.set(31,12,1997);nationalDay.set(1.10,1949);voidDate::Set(intD7、,intM,inty){day=D;month=M;year=Y;}那么,此时计算机怎么能区分该函数是作用在哪个对象上呢?解决方案C++在编译时,自动在每个成员函数中的第一个参数位置增加:X*constthis;当对象调用该函数时,编译器自动将该对象的指针作为实参传递给相应的函数,这样就可解决上述问题:voidDate::Set(Date*constthis,intD,intM,intY){this->day=D;this->month=M;this->year=Y;}注:程序员不能将this指针的说明写在函数中C的结构体struct与C++的stru8、ct的比较C语言的结构体中数据与操作是分离的在C++语言中将数据与操作封装在一个结构体中str
6、i<4;i++,sp++)sp->print();//指针加1后,指向下一个对象sp=sp-3;//指针减3后,指针向前移动三个对象sp->modify(87);sp->print();return0;}4.3this指针对象是由数据和操作构成的一个整体,即使同一类的不同对象的操作也是相互独立的,各占不同的内存空间。但是,在C++实现中,这种处理方案太浪费内存空间。同类的对象能否共享该类成员函数的同一个实例呢?myBirthday.set(31,12,1997);nationalDay.set(1.10,1949);voidDate::Set(intD
7、,intM,inty){day=D;month=M;year=Y;}那么,此时计算机怎么能区分该函数是作用在哪个对象上呢?解决方案C++在编译时,自动在每个成员函数中的第一个参数位置增加:X*constthis;当对象调用该函数时,编译器自动将该对象的指针作为实参传递给相应的函数,这样就可解决上述问题:voidDate::Set(Date*constthis,intD,intM,intY){this->day=D;this->month=M;this->year=Y;}注:程序员不能将this指针的说明写在函数中C的结构体struct与C++的stru
8、ct的比较C语言的结构体中数据与操作是分离的在C++语言中将数据与操作封装在一个结构体中str
此文档下载收益归作者所有