C面向对象程序设计-第2章-类和对象(一)课件_第1页
C面向对象程序设计-第2章-类和对象(一)课件_第2页
C面向对象程序设计-第2章-类和对象(一)课件_第3页
C面向对象程序设计-第2章-类和对象(一)课件_第4页
C面向对象程序设计-第2章-类和对象(一)课件_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章类和对象(一)类对象构造函数析构函数一个对象的生存期对象浅复制与深复制静态成员类成员指针应用实例练习题2上机实验题2第2章类和对象(一)类对象构造函数析构函数一个对象的生存类类的声明类的组织形式类的作用域类的成员函数类的访问权限类与结构体类型的区别类的特点类类的声明类的组织形式类的作用域类的成员函数类的访问权限类与类的声明类是一种用户自定义的数据类型,声明类的一般格式如下:class类名{private:

私有数据成员和成员函数;protected:

保护数据成员和成员函数;public:

公有数据成员和成员函数;};各个成员函数的实现;类界面类实现在声明类时有如下规则:如果类的成员是变量,可以像声明变量一样声明它。如果类的成员是函数,一般是使用函数原型来声明它。如果类的成员是函数,它可以访问类中的任何成员——数据成员和成员函数。也就是说,当声明类的成员函数时,定义的函数可以直接访问该类中任何成员而无需将其声明为参数,惟一的限制条件是在使用一个成员之前必须声明它。类的声明类是一种用户自定义的数据类型,声明类的一般格式如下类的组织形式通常将类界面与类实现分离,将类界面部分存放在头文件(.h)中,将类实现放在程序文件(.cpp)中,而使用类的程序放在另一个程序文件中,这样使整个程序更清晰。例如,声明类C的类界面的部分用c.h文件保存,类实现部分用c.cpp文件保存,而使用类C的部分用a.cpp保存,如图所示。类的组织形式通常将类界面与类实现分离,将类类的作用域声明类时所使用的一对大括号({})形成了类作用域。在类作用域中声明的标识符只在该类中具有可见性,并且其作用域与该标识符声明的次序无关。类作用域包括了类中成员函数的作用域,即使该成员函数的实现放在类的外面也是如此。所以当成员函数的函数体中使用一个标识符时,编译系统首先在成员函数中寻找其声明,如果未找到则在该成员函数所在的类中寻找,如果还未找到,则在包含类作用域的更大作用域中作最后寻找。类的作用域声明类时所使用的一对大括号({})形成了类的成员函数类的成员函数用于实现某种操作,成员函数的定义体可以在类的声明体中,也可以在类的说明体外。在类声明体中实现的函数是内联函数。在类声明体外实现的函数可以通过在函数声明和定义上分别加上inline来表示该函数是内联的,否则不是内联函数。在类的声明体内定义成员函数的优点是使整个类集中于程序代码的同一位置上,不利的方面是增加了类声明的规模和复杂性,而且,内联的函数代码并不被相同类的对象所共享,因而增大了程序的内存开销。类的成员函数类的成员函数用于实现某种操作,成员函数类的访问权限在类声明中,public、private和protected是关键字,称为成员访问限定符,它们分别表示公有、私有和保护的成员访问权限。在C++中,有关类的访问权限的其他规定如下:在默认的情况下,一个类中所有的成员都是私有的。一旦给出了成员访问限定符(如public:),它后面的成员都具有这个成员访问权限(如后面的成员均为公有的),直到出现另一个成员访问限定符或类声明结束为止。类的访问权限在类声明中,public、privat类与结构体类型的区别

从类的声明格式可以看出,类与结构体类型是非常相似的。C++中类是由结构体类型演化而来的,但对结构体类型进行了扩展。类的成员可以是数据成员或成员函数,结构体中的成员也可以是数据成员或函数成员。并且在结构体中,也可以使用关键词public、private、protected限定其成员的访问权限。

实际上,结构体只是类的一个特例。结构体与类惟一区别在于:在类中,其成员的默认访问权限是私有的,而在结构体类型中,其成员的默认访问权限是公有的。

当只需要描述数据结构时,使用结构体较好。当需要描述数据又需要描述对数据的处理方法时使用类为好。类与结构体类型的区别从类的声明格式可以看出,类与结构类的特点类具有如下特点。(1)类具有封装性(2)类具有安全性(3)类具有独立性与可维护性(4)类具有继承性(5)类具有多态性类的特点类具有如下特点。(1)类具有封装性对象对象的定义格式对象的数据成员访问方法对象的成员函数调用方法对象的存储空间对象的赋值运算对象对象的定义格式对象的数据成员访问方法对象的成员函数调用方对象的定义格式一旦声明了一个类,就可以用它作为数据类型来定义类对象(简称为对象)。在C++中,类对象也称为类变量或者类实例。定义类对象的格式如下:类名对象名表;其中,“类名”是待定的对象所属的类的名字,即所定义的对象是该类的对象。“对象名表”中可以有一个或多个对象名,多个对象名之间用逗号分隔。在“对象名表”中,可以是一般的对象名,还可以是指向对象的指针变量名(即对象指针)、引用名(即对象引用)、对象数组名。对象的定义格式一旦声明了一个类,就可以用它作为数对象的数据成员访问方法对象的数据成员的访问方式如下:对象名.数据成员名其中,“.”是一个运算符,该运算符的功能是表示对象的成员。对象的数据成员访问方法对象的数据成员的访问方式如下:对象名对象的成员函数调用方法成员函数的调用是为了响应发送对象的消息。消息对应于从一个对象向另一个对象或者从一个函数向一个对象发送的成员函数调用。调用对象的成员函数的方式如下:对象名.成员名(参数表)对象的成员函数调用方法成员函数的调用是为了响应发送对象的存储空间实际上,C++只为每一个对象的数据成员分配内存空间,类中的所有成员函数只生成一个副本,而该类的每个对象执行相同的函数成员副本。因此在描绘类图时,通常将显示类中所有的成员。然而在描绘类的对象图时,将只显示其数据成员。实际上,类对象也像变量一样,可以定义全局对象或静态对象等,它们的存储空间类型和作用域与全局变量或静态变量是一样的。对象的存储空间实际上,C++只为每一个对象的数据成对象的赋值运算在定义了一个类的多个对象时,可以在对象之间进行赋值运算,也称为对象复制,假设定义了例2.1中类MyClass的两个对象sa1和sa2,它们的值如图所示。对象的赋值运算在定义了一个类的多个对象时,可以在对构造函数什么是构造函数调用构造函数重载构造函数复制构造函数构造函数什么是构造函数调用构造函数重载构造函数复制构造函数什么是构造函数C++提供了利用类的构造函数来初始化类的数据成员。构造函数具有如下性质:构造函数的名字与类的名字相同。构造函数尽管是一个函数,但没有任何类型,即它既不属于返回值函数也不属于void函数。类可以有多个构造函数。然而,一个类的所有构造函数的名字都相同。如果类有多个构造函数,则它们的参数是各不相同的。当类对象创建时,构造函数会自动地执行;由于它们没有类型,不能像其他函数那样进行调用。当类对象说明时调用哪一个构造函数取决于传递给它的参数类型。什么是构造函数C++提供了利用类的构造函数来初始化类的数据调用构造函数当定义类对象时,构造函数会自动执行。因为一个类可能会有包括默认构造函数在内的不止一种构造函数,下面讨论如何调用特定的构造函数。1.调用默认构造函数假设一个类包含有默认构造函数,调用默认构造函数的语法如下:类名类对象名;2.调用带参数的构造函数假设一个类中包含有带参数的构造函数,调用这种带参数的构造函数的语法如下:类名类对象名(参数表)其中,“参数表”中的参数可以是变量,也可以是表达式。3.调用内置数据类型的构造函数实际上,C++中内置的数据类型都可以看成是类,定义变量时除了可以使用“=”运算符赋初值外,还可以像定义类对象一样调用其构造函数给变量赋初值。调用构造函数当定义类对象时,构造函数会自动执行。因4.用new动态创建对象

可以用new运算符来动态地建立对象。用new运算符建立对象时,同样也要自动调用构造函数,以便完成对象数据成员的初始化。5.用构造函数初始化对象的过程

构造函数初始化对象的过程,实际上就是对构造函数的调用过程。一般情况下按如下步骤进行:(1)程序执行到定义对象语句时,系统为对象分配内存空间。(2)系统自动调用构造函数,将实参传送给形参,执行构造函数体时,将形参值赋给对象的数据成员。完成数据成员的初始化工作。4.用new动态创建对象可以用new运算符来动态地建立重载构造函数构造函数可以像普通函数一样被重载,C++根据声明中的参数个数和类型选择合适的构造函数。重载构造函数构造函数可以像普通函数一样被重载,C+复制构造函数复制构造函数常用于将一个已知对象的数据成员复制给正在创建的另一个同类的对象。除此之外,复制构造函数可以像其他构造函数一样定义和使用。复制构造函数的格式如下:类名::复制构造函数(类名&引用名)或:类名::复制构造函数(const类名&引用名)在以下3种情况下,复制构造函数都会自动被调用:当说明一个类的对象时,使用另外一个对象来初始化(此时复制构造函数就如同其他构造函数一样使用)。当一个函数返回值为类类型时。当一个类类型的实参传递给函数中的传值调用参数时,在这种情况下,复制构造函数决定了参数按照什么方式传递。复制构造函数复制构造函数常用于将一个已知对象的数据析构函数什么是析构函数析构函数的性质析构函数的调用析构函数什么是析构函数析构函数的性质析构函数的调用什么是析构函数同构造函数一样,析构函数也是类的特殊成员函数,不用调用便自动执行,而且析构函数的名字也与类的名字有关。C++程序设计的一个原则是:由系统自动分配的内存空间由系统自动释放。什么是析构函数同构造函数一样,析构函数也是类的特殊析构函数的性质析构函数具有如下性质:析构函数在类对象销毁时自动执行。一个类只能有一个析构函数,而且析构函数没有参数。析构函数的名字是“~”加上类的名字(中间没有空格)。与构造函数一样,析构函数也没有任何类型,即不属于返回值函数也不属于void函数。它们不能像其他函数那样被调用。析构函数的性质析构函数具有如下性质:析构函数在类对象销析构函数的调用析构函数被系统自动调用时分为以下两种情况。1.用类直接建立对象

在程序执行过程中,当遇到对象的生存期结束时,系统自动调用析构函数,然后回收为对象所分配的存储空间。2.用new动态创建对象

对于用new运算符动态创建的对象,在产生对象时调用构造函数,只有用delete释放对象时,才调用析构函数。若不使用delete运算符来撤销动态生成的对象,程序结束时对象仍存在,并占用相应的存储空间,即系统不能自动撤销动态创建的对象。析构函数的调用析构函数被系统自动调用时分为以下两种情况。1一个对象的生存期如同一个变量一样,对象从被创建到被释放为止的时间称为对象的生存期。一个对象的生存期如图所示。一个对象的生存期如同一个变量一样,对象从被创建到被释对象浅复制与深复制对象浅复制对象深复制对象浅复制与深复制对象浅复制对象深复制对象浅复制当两个对象之间进行复制时,若复制完成后,它们还共享某些资源(内存空间),其中一个对象的销毁会影响另一个对象,这种对象之间的复制称为对象浅复制。对象浅复制当两个对象之间进行复制时,若复制完成后,对象深复制当两个对象之间进行复制时,若复制完成后,它们不会共享任何资源(内存空间),其中一个对象的销毁不会影响另一个对象,这种对象之间的复制称为对象深复制。对象深复制当两个对象之间进行复制时,若复制完成后,静态成员静态数据成员静态成员函数静态成员静态数据成员静态成员函数静态数据成员静态数据成员是类中所有对象共享的成员,而不是某个对象的成员,也就是说静态数据成员的存储空间不是放在每个对象中,而是和成员函数一样放在类公共区中。所以有时将静态数据成员称为类变量。因为静态数据成员不从属于任何一个具体对象,所以必须对它初始化,而且对它的初始化不能在构造函数中进行。静态数据成员的使用方法如下:(1)静态数据成员的定义与一般数据成员相似,但前面要加上static关键词。当数据成员的一个副本就已经足够时,可使用static数据成员来节省存储空间。(2)静态数据成员的初始化与一般数据成员不同,静态数据成员初始化的格式如下:类型类名::静态数据成员=值;(3)在引用静态数据成员时采用格式类名::静态数据成员静态数据成员静态数据成员是类中所有对象共享的成员,静态成员函数静态成员函数与静态数据成员类似,也是从属于类,都是类的静态成员。只要类存在,静态成员函数就可以使用,静态成员函数的定义是在一般函数定义前加上static关键字。调用静态成员函数的格式如下:类名::静态成员函数名(参数表);静态成员函数静态成员函数与静态数据成员类似,也是从类成员指针类数据成员指针类成员函数指针类成员指针类数据成员指针类成员函数指针类数据成员指针类数据成员指针的定义格式如下:类型类名::*指针名由于类不是在运行时存在的对象,因此在使用类数据成员指针时,需要首先指定类的一个数据成员,然后通过类的对象来引用指针所指向的成员。类数据成员指针类数据成员指针的定义格式如下:类型类名::类成员函数指针指向类成员函数指针的定义格式如下:类型(类名::*指针名)(参数表)给类成员函数指针赋值的格式如下:指向函数的指针名=函数名程序中使用指向函数的指针调用函数的格式如下:(*指向函数的指针名)(实参表)类成员函数指针指向类成员函数指针的定义格式如下:应用实例编写一个程序,设计一个满足如下要求的CDate类,用数据进行调试并输出结果:(1)用日/月/年格式输出日期。(2)可进行日期加一天的操作。(3)设置日期。应用实例编写一个程序,设计一个满足如下要求的CDate类,用练习题2给出以下程序的执行结果。#include<iostream.h>classSample{intx,y;public:Sample(){x=y=0;}Sample(inta,intb) {x=a;y=b;}~Sample(){if(x==y)cout<<"x=y"<<endl;elsecout<<"x!=y"<<endl;}voiddisp(){cout<<"x="<<x<<",y="<<y<<endl;}};voidmain(){Samples1(2,3);s1.disp();}练习题2给出以下程序的执行结果。#include<iost上机实验题2设计一个词典类Dic,其中包含若干单词信息,每个单词由英文单词及对应的中文含义组成。并含有单词增加和英汉翻译成员函数,通过查词典的方式将一段英语翻译成对应的汉语。上机实验题2设计一个词典类Dic,其中包含若第2章类和对象(一)类对象构造函数析构函数一个对象的生存期对象浅复制与深复制静态成员类成员指针应用实例练习题2上机实验题2第2章类和对象(一)类对象构造函数析构函数一个对象的生存类类的声明类的组织形式类的作用域类的成员函数类的访问权限类与结构体类型的区别类的特点类类的声明类的组织形式类的作用域类的成员函数类的访问权限类与类的声明类是一种用户自定义的数据类型,声明类的一般格式如下:class类名{private:

私有数据成员和成员函数;protected:

保护数据成员和成员函数;public:

公有数据成员和成员函数;};各个成员函数的实现;类界面类实现在声明类时有如下规则:如果类的成员是变量,可以像声明变量一样声明它。如果类的成员是函数,一般是使用函数原型来声明它。如果类的成员是函数,它可以访问类中的任何成员——数据成员和成员函数。也就是说,当声明类的成员函数时,定义的函数可以直接访问该类中任何成员而无需将其声明为参数,惟一的限制条件是在使用一个成员之前必须声明它。类的声明类是一种用户自定义的数据类型,声明类的一般格式如下类的组织形式通常将类界面与类实现分离,将类界面部分存放在头文件(.h)中,将类实现放在程序文件(.cpp)中,而使用类的程序放在另一个程序文件中,这样使整个程序更清晰。例如,声明类C的类界面的部分用c.h文件保存,类实现部分用c.cpp文件保存,而使用类C的部分用a.cpp保存,如图所示。类的组织形式通常将类界面与类实现分离,将类类的作用域声明类时所使用的一对大括号({})形成了类作用域。在类作用域中声明的标识符只在该类中具有可见性,并且其作用域与该标识符声明的次序无关。类作用域包括了类中成员函数的作用域,即使该成员函数的实现放在类的外面也是如此。所以当成员函数的函数体中使用一个标识符时,编译系统首先在成员函数中寻找其声明,如果未找到则在该成员函数所在的类中寻找,如果还未找到,则在包含类作用域的更大作用域中作最后寻找。类的作用域声明类时所使用的一对大括号({})形成了类的成员函数类的成员函数用于实现某种操作,成员函数的定义体可以在类的声明体中,也可以在类的说明体外。在类声明体中实现的函数是内联函数。在类声明体外实现的函数可以通过在函数声明和定义上分别加上inline来表示该函数是内联的,否则不是内联函数。在类的声明体内定义成员函数的优点是使整个类集中于程序代码的同一位置上,不利的方面是增加了类声明的规模和复杂性,而且,内联的函数代码并不被相同类的对象所共享,因而增大了程序的内存开销。类的成员函数类的成员函数用于实现某种操作,成员函数类的访问权限在类声明中,public、private和protected是关键字,称为成员访问限定符,它们分别表示公有、私有和保护的成员访问权限。在C++中,有关类的访问权限的其他规定如下:在默认的情况下,一个类中所有的成员都是私有的。一旦给出了成员访问限定符(如public:),它后面的成员都具有这个成员访问权限(如后面的成员均为公有的),直到出现另一个成员访问限定符或类声明结束为止。类的访问权限在类声明中,public、privat类与结构体类型的区别

从类的声明格式可以看出,类与结构体类型是非常相似的。C++中类是由结构体类型演化而来的,但对结构体类型进行了扩展。类的成员可以是数据成员或成员函数,结构体中的成员也可以是数据成员或函数成员。并且在结构体中,也可以使用关键词public、private、protected限定其成员的访问权限。

实际上,结构体只是类的一个特例。结构体与类惟一区别在于:在类中,其成员的默认访问权限是私有的,而在结构体类型中,其成员的默认访问权限是公有的。

当只需要描述数据结构时,使用结构体较好。当需要描述数据又需要描述对数据的处理方法时使用类为好。类与结构体类型的区别从类的声明格式可以看出,类与结构类的特点类具有如下特点。(1)类具有封装性(2)类具有安全性(3)类具有独立性与可维护性(4)类具有继承性(5)类具有多态性类的特点类具有如下特点。(1)类具有封装性对象对象的定义格式对象的数据成员访问方法对象的成员函数调用方法对象的存储空间对象的赋值运算对象对象的定义格式对象的数据成员访问方法对象的成员函数调用方对象的定义格式一旦声明了一个类,就可以用它作为数据类型来定义类对象(简称为对象)。在C++中,类对象也称为类变量或者类实例。定义类对象的格式如下:类名对象名表;其中,“类名”是待定的对象所属的类的名字,即所定义的对象是该类的对象。“对象名表”中可以有一个或多个对象名,多个对象名之间用逗号分隔。在“对象名表”中,可以是一般的对象名,还可以是指向对象的指针变量名(即对象指针)、引用名(即对象引用)、对象数组名。对象的定义格式一旦声明了一个类,就可以用它作为数对象的数据成员访问方法对象的数据成员的访问方式如下:对象名.数据成员名其中,“.”是一个运算符,该运算符的功能是表示对象的成员。对象的数据成员访问方法对象的数据成员的访问方式如下:对象名对象的成员函数调用方法成员函数的调用是为了响应发送对象的消息。消息对应于从一个对象向另一个对象或者从一个函数向一个对象发送的成员函数调用。调用对象的成员函数的方式如下:对象名.成员名(参数表)对象的成员函数调用方法成员函数的调用是为了响应发送对象的存储空间实际上,C++只为每一个对象的数据成员分配内存空间,类中的所有成员函数只生成一个副本,而该类的每个对象执行相同的函数成员副本。因此在描绘类图时,通常将显示类中所有的成员。然而在描绘类的对象图时,将只显示其数据成员。实际上,类对象也像变量一样,可以定义全局对象或静态对象等,它们的存储空间类型和作用域与全局变量或静态变量是一样的。对象的存储空间实际上,C++只为每一个对象的数据成对象的赋值运算在定义了一个类的多个对象时,可以在对象之间进行赋值运算,也称为对象复制,假设定义了例2.1中类MyClass的两个对象sa1和sa2,它们的值如图所示。对象的赋值运算在定义了一个类的多个对象时,可以在对构造函数什么是构造函数调用构造函数重载构造函数复制构造函数构造函数什么是构造函数调用构造函数重载构造函数复制构造函数什么是构造函数C++提供了利用类的构造函数来初始化类的数据成员。构造函数具有如下性质:构造函数的名字与类的名字相同。构造函数尽管是一个函数,但没有任何类型,即它既不属于返回值函数也不属于void函数。类可以有多个构造函数。然而,一个类的所有构造函数的名字都相同。如果类有多个构造函数,则它们的参数是各不相同的。当类对象创建时,构造函数会自动地执行;由于它们没有类型,不能像其他函数那样进行调用。当类对象说明时调用哪一个构造函数取决于传递给它的参数类型。什么是构造函数C++提供了利用类的构造函数来初始化类的数据调用构造函数当定义类对象时,构造函数会自动执行。因为一个类可能会有包括默认构造函数在内的不止一种构造函数,下面讨论如何调用特定的构造函数。1.调用默认构造函数假设一个类包含有默认构造函数,调用默认构造函数的语法如下:类名类对象名;2.调用带参数的构造函数假设一个类中包含有带参数的构造函数,调用这种带参数的构造函数的语法如下:类名类对象名(参数表)其中,“参数表”中的参数可以是变量,也可以是表达式。3.调用内置数据类型的构造函数实际上,C++中内置的数据类型都可以看成是类,定义变量时除了可以使用“=”运算符赋初值外,还可以像定义类对象一样调用其构造函数给变量赋初值。调用构造函数当定义类对象时,构造函数会自动执行。因4.用new动态创建对象

可以用new运算符来动态地建立对象。用new运算符建立对象时,同样也要自动调用构造函数,以便完成对象数据成员的初始化。5.用构造函数初始化对象的过程

构造函数初始化对象的过程,实际上就是对构造函数的调用过程。一般情况下按如下步骤进行:(1)程序执行到定义对象语句时,系统为对象分配内存空间。(2)系统自动调用构造函数,将实参传送给形参,执行构造函数体时,将形参值赋给对象的数据成员。完成数据成员的初始化工作。4.用new动态创建对象可以用new运算符来动态地建立重载构造函数构造函数可以像普通函数一样被重载,C++根据声明中的参数个数和类型选择合适的构造函数。重载构造函数构造函数可以像普通函数一样被重载,C+复制构造函数复制构造函数常用于将一个已知对象的数据成员复制给正在创建的另一个同类的对象。除此之外,复制构造函数可以像其他构造函数一样定义和使用。复制构造函数的格式如下:类名::复制构造函数(类名&引用名)或:类名::复制构造函数(const类名&引用名)在以下3种情况下,复制构造函数都会自动被调用:当说明一个类的对象时,使用另外一个对象来初始化(此时复制构造函数就如同其他构造函数一样使用)。当一个函数返回值为类类型时。当一个类类型的实参传递给函数中的传值调用参数时,在这种情况下,复制构造函数决定了参数按照什么方式传递。复制构造函数复制构造函数常用于将一个已知对象的数据析构函数什么是析构函数析构函数的性质析构函数的调用析构函数什么是析构函数析构函数的性质析构函数的调用什么是析构函数同构造函数一样,析构函数也是类的特殊成员函数,不用调用便自动执行,而且析构函数的名字也与类的名字有关。C++程序设计的一个原则是:由系统自动分配的内存空间由系统自动释放。什么是析构函数同构造函数一样,析构函数也是类的特殊析构函数的性质析构函数具有如下性质:析构函数在类对象销毁时自动执行。一个类只能有一个析构函数,而且析构函数没有参数。析构函数的名字是“~”加上类的名字(中间没有空格)。与构造函数一样,析构函数也没有任何类型,即不属于返回值函数也不属于void函数。它们不能像其他函数那样被调用。析构函数的性质析构函数具有如下性质:析构函数在类对象销析构函数的调用析构函数被系统自动调用时分为以下两种情况。1.用类直接建立对象

在程序执行过程中,当遇到对象的生存期结束时,系统自动调用析构函数,然后回收为对象所分配的存储空间。2.用new动态创建对象

对于用new运算符动态创建的对象,在产生对象时调用构造函数,只有用delete释放对象时,才调用析构函数。若不使用delete运算符来撤销动态生成的对象,程序结束时对象仍存在,并占用相应的存储空间,即系统不能自动撤销动态创建的对象。析构函数的调用析构函数被系统自动调用时分为以下两种情况。1一个对象的生存期如同一个变量一样,对象从被创建到被释放为止的时间称为对象的生存期。一个对象的生存期如图所示。一个对象的生存期如同一个变量一样,对象从被创建到被释对象浅复制与深复制对象浅复制对象深复制对象浅复制与深复制对象浅复制对象深复制对象浅复制当两个对象之间进行复制时,若复制完成后,它们还共享某些资源(内存空间),其中一个对象的销毁会影响另一个对象,这种对象之间的复制称为对象浅复制。对象浅复制当两个对象之间进行复制时,若复制完成后,对象深复制当两个对象之间进行复制时,若复制完成后,它们不会共享任何资源(内存空间),其中一个对象的销毁不会影响另一个对象,这种对象之间的复制称为对象深复制。对象深复制当两个对象之间进行复制时,若复制完成后,静态成员静态数据成员静态成员函数静态成员静态数据成员静态成员函数静态数据成员静态数据成员是类中所有对象共享的成员,而不是某个对象的成员,也就是说静态数据成员的存储空间不是放在每个对象中,而是和成员函数一样放在类公共区中。所以有时将静态数据成员称为类变量。因为静态数据成员不从属于任何一个具体对象,所以必须对它初始化,而且对它的初始化不能在构造函数中进行。静态数据成员的使用方法如下:(1)静态数据成员的定义与

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论