欢迎来到天天文库
浏览记录
ID:49263885
大小:465.00 KB
页数:27页
时间:2020-02-02
《对象成员静态成员.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、复习动态内存分配和回收:new和delete优点:不需要计算申请空间字节数;不需要强制类型转换;注意:两种申请形式和相应的回收形式;和delete配合使用。特殊的对象指针----this指针非静态成员函数的隐含参数;指向当前对象;自动隐含实现参数传递;静态成员函数没有this指针。内嵌对象(对象成员)和聚合类和外部类是”组成“关系。”初始化成员列表“;构造函数调用次序静态成员1例如:float*p5=newfloat(2.5);//p5为指向浮点型数据的指针,此浮点数值为2.5intc=10;int*p6=newint[c];in
2、t*p2=newint[4][8];//在内存中申请能存放10个整型数的空间,p6指向空间开始的地方。//在内存中申请能存放8X4个整型数的空间,p2指向空间开始的地方例子:释放动态申请的空间int*stringptr1=newint(3);int*stringptr2=newint[100];deletestringptr1;//回收一个整数空间delete[]stringptr2;//回收数组空间44*this指针可以理解为成员函数定义时,系统自动增加的一个默认参数。调用成员函数时,由系统自动把当前对象的地址传递给这个默认参数
3、。例如:对象A调用一个成员函数时,系统自动为该函数指定一个指向对象A的指针,就是*this指针对一个类的不同对象,尽管成员函数共享,但成员函数的*this指针却随对象的变化而变化,总是指向当前对象。Date::Date(intmm,intdd,intyy){………………}Date::Date(intmm,intdd,intyy,Date*constthis){………………}53对象成员在定义一个新类时,可以把一个已定义类的对象作为该类的成员,称为对象成员。类与类之间互不干涉内政对于含有对象成员的对象,在对该它进行初始化之前,首先要
4、对其中的对象成员进行初始化,这要通过调用对象成员的构造函数来实现。通常采用“初始化成员列表”的方法向对象成员的构造函数传递实参。【例10.17】6初始化成员列表的一般格式是:<类名>(参数表0):c1(参数表1)《,c2(参数表2),…,cn(参数表n)》{…}//构造函数体冒号后面的部分称为初始化成员列表,c1、…、cn可为对象成员名,也可为基本数据类型的成员数据。对象成员初始化的顺序取决于这些对象成员在类中说明的顺序,即先说明先调用,与他们在成员初始化列表中的顺序无关。7综上所述,在创建具有对象成员的类的对象时,应先按对象成员
5、定义的先后次序调用各个对象成员的构造函数,然后才调用这个类本身的构造函数。析构函数的调用顺序与构造函数正好相反。4静态成员类相当于一个数据类型,当说明一个某类的对象时,系统就为该对象分配一块内存单元来存放类中的所有数据成员。但在某些应用中,需要程序中属于某个类的所有对象共享某个数据。为此,一个解决的办法就是将所要共享的数据说明为全局变量,但这将破坏数据的封装性;较好的解决办法是将所要共享的数据说明为类的静态成员。静态成员举例:银行账户Classaccount{private:doublebalance;//余额staticfloa
6、tinterestYTD;//利率char*name;//姓名char*accountID;//账号public:voidMakeDeposit();voidTransfer();staticvoidModInterest();//调整利率}4.1静态数据成员C++中,同一个类定义多个对象时,每个对象拥有各自的数据成员(不包括静态数据成员),而所有对象共享一份成员函数和一份静态数据成员。静态数据成员是类的所有对象所共享的成员,而不是某个对象的成员,因此可以实现多个对象间的数据共享。静态数据成员不属于任何对象,它不因对象的建立而产生
7、,也不因对象的析构而删除,它是类定义的一部分,所以使用静态数据成员不会破坏类的封装性。对静态数据成员的操作和一般数据成员一样,定义为私有的静态数据成员不能由外界访问。静态数据成员可由任意访问权限许可的函数访问。可以在类的成员函数中改变静态数据成员。类中用关键字static修饰的数据成员叫做静态数据成员,必须对它初始化。静态数据成员不从属于任何一个具体对象,所以对它的初始化不能在构造函数中进行。静态数据成员的使用方法如下:(1)静态数据成员的定义与一般数据成员相似,但前面要加上static关键词。例如:classClass1{int
8、a;staticintb;//静态数据成员//…}c1,c2;(2)静态数据成员的初始化与一般数据成员不同,在类体外进行。静态数据成员初始化的格式如下:<类型><类名>::<静态数据成员>=<值>;例如:intClass1::b=0;(3)在引用静
此文档下载收益归作者所有