用new建立动态对象 A * p=new A(l,1) 用new建立对象就象是用new建立一个变量一样,分配一段相应大 小的内存(刚好能放下一个类的对象的空间),然后返回这段空间的 首地址(指针)但是为什么要和构造函数一同起作用呢? 因为光有new分配内存的话,就好象是临时划给了一块地基,我 们看不到建成的房子的结构是怎么样的,每个房间有多大,而构 造函数就是在它得到这块地基后,马上就把这块地按图样(构造函 数的实现)建成了一套新房(初始化)。这时才能返回指针值(门牌地 址) 因为用new建立的对象是动态对象,当不需要这个对象时,指 针所指的空间将被浪费,所以要用 delete把指针删除,好比把这 所房子的看门人全赶走了,那这块地又可以为大家所使用了
用new 建立动态对象: A *p=new A(1,1) 用new建立对象就象是用new建立一个变量一样,分配一段相应大 小的内存(刚好能放下一个类的对象的空间),然后返回这段空间的 首地址(指针).但是为什么要和构造函数一同起作用呢? 因为光有new分配内存的话,就好象是临时划给了一块地基,我 们看不到建成的房子的结构是怎么样的,每个房间有多大,而构 造函数就是在它得到这块地基后,马上就把这块地按图样(构造函 数的实现)建成了一套新房(初始化)。这时才能返回指针值(门牌地 址)。 因为用new建立的对象是动态对象,当不需要这个对象时,指 针所指的空间将被浪费,所以要用delete把指针删除,好比把这 所房子的看门人全赶走了,那这块地又可以为大家所使用了
缺省构造函数和对象数组: 不带参数的构造函数就是缺省构造函数。如果没有定义任何构 造函数时,系统会自动建立一个空的缺省构造函数,它是空的, 徒有其表,所以建了也等于白建。 当定义一个对象数组(成组的对象)时,一定要建立一个缺省构造函 数(系统建立的那个可没用)为它们进行初始化。为什么呢,因为每 个元素对象均需要调用一次缺省构造函数来为自己初始化。如同上 面的比方,分地基是一个元素一个元素分的,前一块地没有确定下 来,就不能返回相应指针,后面的分配就无法继续 总之,定义对象(局部对象)或引用对象(全局或静态对象)时, 总要为对象初始化或者提供初始值才行
缺省构造函数和对象数组: 不带参数的构造函数就是缺省构造函数。如果没有定义任何构 造函数时,系统会自动建立一个空的缺省构造函数,它是空的, 徒有其表,所以建了也等于白建。 当定义一个对象数组(成组的对象)时,一定要建立一个缺省构造函 数(系统建立的那个可没用)为它们进行初始化。为什么呢,因为每 个元素对象均需要调用一次缺省构造函数来为自己初始化。如同上 面的比方,分地基是一个元素一个元素分的,前一块地没有确定下 来,就不能返回相应指针,后面的分配就无法继续 总之,定义对象(局部对象)或引用对象(全局或静态对象)时, 总要为对象初始化或者提供初始值才行
析构函数 析就是解除的意思,当对象消失时,它就跳出来执行(实际上是被 调用)。这样就可以利用它来做一些清理工作。 析构函数的定义和构造函数相同,与类同名只是名字前要加 个"~"号,也是类中的成员函数 局部对象(在函数内建立的对象)生存期结束时被调用,也就是说 函数中建立对象之后,它就开始生存,直到函数运行到遇见右 括号},它就结束生存,此时调用析构函数 全局对象和静态对象的析构函数则是在程序(整个程序)运行完毕 (或用exi终止程序时)被调用
析构函数 析就是解除的意思,当对象消失时,它就跳出来执行(实际上是被 调用)。这样就可以利用它来做一些清理工作。 析构函数的定义和构造函数相同,与类同名只是名字前要加一 个"~"号,也是类中的成员函数。 局部对象(在函数内建立的对象)生存期结束时被调用,也就是说 函数中建立对象之后,它就开始生存,直到函数运行到遇见右 括号},它就结束生存,此时调用析构函数。 全局对象和静态对象的析构函数则是在程序(整个程序)运行完毕 (或用exit终止程序时)被调用
用 delete删除动态对象的方法:和前面的new建立动态对象过程相 反,当 delete删除一个动态对象时,先调用它的析构函数(用前面的 例子就是拆房子),然后释放这个动态所占的内存(退地) 缺省析构函数和前面的缺省构造函数一样,如果没有定义, C++编译器自动产生一个,但是和没产生一样,因为它什么 也不做
用delete删除动态对象的方法:和前面的new 建立动态对象过程相 反,当delete删除一个动态对象时,先调用它的析构函数(用前面的 例子就是拆房子),然后释放这个动态所占的内存(退地)。 缺省析构函数和前面的缺省构造函数一样,如果没有定义, C++编译器自动产生一个,但是和没产生一样,因为它什么 也不做
对象初始化和对象赋值 对象的初始化有几种方法: 一是利用构造函数的参数,当建立对象时,在对象名之后的括号 内给出对象的初值。如 Test Try(5) 二是用等号在说明语句中进行初始化:如 Test Try1=5;这时,编译器 仍把它们解释为对象名后带参数的语句; 是用复制初始化构造函数来初始化对象,如 Test Try2(Tryl1).也 就是用一个已经初始化的对象来初始化现在的对象。但是当类中 没有定义复制初始化构造函数时,C++就会自动生成一个(这回不 是空的)缺省复制初始化构造函数达到用作为初始值的对象的成员 初始化新对象的的相应成员的目的。但是这个缺省函数有时会产 生问题。主要是当参数是指针的引用的情况
对象初始化和对象赋值 对象的初始化有几种方法: 一是利用构造函数的参数,当建立对象时,在对象名之后的括号 内给出对象的初值。如Test Try(5); 二是用等号在说明语句中进行初始化:如 Test Try1=5;这时,编译器 仍把它们解释为对象名后带参数的语句; 三是用复制初始化构造函数来初始化对象,如 Test Try2(Try1).也 就是用一个已经初始化的对象来初始化现在的对象。但是当类中 没有定义复制初始化构造函数时,C++就会自动生成一个(这回不 是空的)缺省复制初始化构造函数达到用作为初始值的对象的成员 初始化新对象的的相应成员的目的。但是这个缺省函数有时会产 生问题。主要是当参数是指针的引用的情况
对象成员 在一个类中说明具有类的类型的数据成员,这些成员就称为对象 成员。定义的方法是: class类名{ 类名1成员名1;事实上就是一个对象,这个对象的类型和名字 类名2成员名2;别忘了分号 类名n成员名n 其他成员的类型和成员名
对象成员 在一个类中说明具有类的类型的数据成员,这些成员就称为对象 成员。定义的方法是: class 类名{ 类名1 成员名1 ;//事实上就是一个对象,这个对象的类型和名字 类名2 成员名2 ;//别忘了分号 ... 类名n 成员名n; 其他成员的类型 和 成员名; }
对于有对象成员的类的初始化,也要有构造函数。定义的方法是: X::X(参数表0):成员1(参数表1),成员2(参数表2),成员n(参数 表n) 初始化有对象成员的类的时候,先调用对象成员的构造函数, 对成员进行初始化,再执行类的构造函数,对类中其他成员进 行初始化。析构函数的调用顺序正好相反
对于有对象成员的类的初始化,也要有构造函数。定义的方法是: X ::X(参数表0):成员1(参数表1),成员2(参数表2),成员n(参数 表n) { //... } 初始化有对象成员的类的时候,先调用对象成员的构造函数, 对成员进行初始化,再执行类的构造函数,对类中其他成员进 行初始化。析构函数的调用顺序正好相反