构造函数和析构函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++ Programming
【例10.6】构造函数的重载
# include <iostream.h> class Point { private: int X,Y; public: Point(){X=Y=0;} Point(int m){X=m;Y=0,} Point(intm,intn){X=m;Y=n;} void SetX(intm){X=m;} void SetY(int n){Y=m} intGetX(){,eturn X;} int GetY(){return Y;} }; void main()
对于缺省的构造函数要注意的几点
如果在类中定义了构造函数,则编译器就 不会自动产生缺省的构造函数 要在创建对象的同时对其中的成员数据初 始化,就必须定义构造函数 创建对象时,一定要调用一个构造函数, 不管是自定义的构造函数,还是缺省的构 造函数。如果没有相应的构造函数,则会 产生错误。比如
C++ Programming
构造函数
10.1
对象是类的实例,在使用对象中的成员数据之前, 首先要对对象中的成员数据进行初始化。 在定义类时不能对类中的成员数据直接初始化, 但在创建对象时可借助于四种方法进行初始化。 构造函数的定义 构造函数和对象的初始化 构造函数的重载 缺省构造函数和具有缺省参数值的构造函数
C++ Programming
class CSimpleString { char *string; int length; public: CSimpleString(int); //声明构造函数 }; CSimpleString::CSimpleString(int a) //定义构造函数 { string=0; length=a; }
C++ Programming
构造函数的定义
10.1.1
C++规定与类同名的成员函数是构造函数, 它是一个特殊的成员函数,没有返回值。 构造函数定义的一般格式为: <类名>::<类名>(<形参表>) {…} 示例 构造函数没有返回值,在声明和定义构造 函数不能说明它的类型,即使void类型也 不行。
C++ Programming
缺省的构造函数
缺省的构造函数 具有缺省参数值的构造函数
10.1.4
C++ Programming
缺省的构造函数
在创建一个对象时,系统会自动调用构造函数。 如果在类中没有定义构造函数,编译系统会自动 产生一个缺省的构造函数,其格式为: <类名> ::<类名>( ){ } 这是一个参数表和函数体都为空的构造函数,它 并没有对对象中的成员数据做任何的初始化工作。 因此如果在创建对象过程中调用缺省构造函数, 则对象中的数据是不确定的,还必须采用其它方 式对对象中的成员数据进行初始化。 【例10.7】调用缺省构造函数 对于缺省的构造函数要注意的几点
本章学习要求
初始化对象的必要性和使用初始化列表初始化对 象。 隐藏对象的产生过程和构造函数类型转换;复制 初始化构造数的使用;复制初始化构造函数和析 构函数的执行方式,对象赋值方法; 析构函数定义、作用及何时被调用;使用运算符 delete除动态对象的方法;缺省析构函数;对象 成员和对象成员构造函数的定义方法;对象成员 构造函数和析构函数的调用顺序; 定义构造函数的方法并能用运算符new建立动态对 象;缺省构造函数;运用对象数组;复制初始化 构造函数的定义方法。
构造函数的重载
10.1.3
与普通函数一样,只要参数的个数或类型不同, 就可以实现构造函数的重载。也就是说,一个类 可以有多个构造函数。 具有多个构造函数使得类具有更大的灵活性,即 可以根据不同的要求进行不同的初始化。与普通 函数类似,根据创建对象时对象后的<实参表>的 类型和个数,系统将会自动调用<形参表>与该<实 参表>匹配的构造函数,如果不存在相匹配的构造 函数,则系统报错。 【例10.6】构造函数的重载
C++ Programming
【例10.7】调用缺省构造函数
#include<iostream.h> class CNum { int i,j; public: void SetData(int x, int y){ i=x, j=y; } void Print(){cout<<i<<'\t'<<j<<endl;} }; void main() { CNum a1; //调用缺省构造函数 a1.Print(); //对象a1中的成 员为不确定的值 a1.SetData(3,5); C++ Programming
C++ Programming
四种方法进行初始化
用初始化列表的方法,这种方法的缺点是只能对 公有成员数据初始化,对私有和保护类型的数据 无能为力,又由于对象的封装性要求将类的成员 数据都定义为私有的,因此这种方法不常用; 通过赋值语句来实现,即将一个已经初始化的对 象赋给要初始化的对象; 通过在类中定义一个成员函数,该成员函数能够 对对象中的成员数据进行设置; 通过构造函数来进行初始化,这是一种最常用的 方法,它的特点是在创建对象的同时能自动对对 象中的成员数据进行初始化。
C++ PrograFra Baidu bibliotekming
构造函数和对象的初始化
10.1.2
C++系统规定在创建一个对象时,首先调用该对象 的构造函数,因此通常利用构造函数对对象中的 成员数据进行初始化。对构造函数的调用是隐性 的,即由编译系统自动调用,在创建对象时可以 向构造函数传递实参,一般格式为: <类名> <对象名>《(<实参表>)》; 其中<实参表>为向构造函数传递的参数,它可以 为空,该实参表必须与某个构造函数的参数的类 型和个数一致。 【例10.5】 构造函数的初始化作用
C++ Programming
【例10.5】 构造函数的初始化作用
#include <iostream.h> class CPoint { int x,y; public: CPoint(int vx,int vy); //声明构造函数 void OffSet(int ax,int ay); void Print(){ cout<<"横坐标为:"<<x<<'\n'; cout<<"纵坐标为:"<<y<<'\n'; } }; CPoint::CPoint(int vx,int vy){ //定义构 造函数 x=vx; y=vy; C++ Programming
【例10.6】构造函数的重载
# include <iostream.h> class Point { private: int X,Y; public: Point(){X=Y=0;} Point(int m){X=m;Y=0,} Point(intm,intn){X=m;Y=n;} void SetX(intm){X=m;} void SetY(int n){Y=m} intGetX(){,eturn X;} int GetY(){return Y;} }; void main()
对于缺省的构造函数要注意的几点
如果在类中定义了构造函数,则编译器就 不会自动产生缺省的构造函数 要在创建对象的同时对其中的成员数据初 始化,就必须定义构造函数 创建对象时,一定要调用一个构造函数, 不管是自定义的构造函数,还是缺省的构 造函数。如果没有相应的构造函数,则会 产生错误。比如
C++ Programming
构造函数
10.1
对象是类的实例,在使用对象中的成员数据之前, 首先要对对象中的成员数据进行初始化。 在定义类时不能对类中的成员数据直接初始化, 但在创建对象时可借助于四种方法进行初始化。 构造函数的定义 构造函数和对象的初始化 构造函数的重载 缺省构造函数和具有缺省参数值的构造函数
C++ Programming
class CSimpleString { char *string; int length; public: CSimpleString(int); //声明构造函数 }; CSimpleString::CSimpleString(int a) //定义构造函数 { string=0; length=a; }
C++ Programming
构造函数的定义
10.1.1
C++规定与类同名的成员函数是构造函数, 它是一个特殊的成员函数,没有返回值。 构造函数定义的一般格式为: <类名>::<类名>(<形参表>) {…} 示例 构造函数没有返回值,在声明和定义构造 函数不能说明它的类型,即使void类型也 不行。
C++ Programming
缺省的构造函数
缺省的构造函数 具有缺省参数值的构造函数
10.1.4
C++ Programming
缺省的构造函数
在创建一个对象时,系统会自动调用构造函数。 如果在类中没有定义构造函数,编译系统会自动 产生一个缺省的构造函数,其格式为: <类名> ::<类名>( ){ } 这是一个参数表和函数体都为空的构造函数,它 并没有对对象中的成员数据做任何的初始化工作。 因此如果在创建对象过程中调用缺省构造函数, 则对象中的数据是不确定的,还必须采用其它方 式对对象中的成员数据进行初始化。 【例10.7】调用缺省构造函数 对于缺省的构造函数要注意的几点
本章学习要求
初始化对象的必要性和使用初始化列表初始化对 象。 隐藏对象的产生过程和构造函数类型转换;复制 初始化构造数的使用;复制初始化构造函数和析 构函数的执行方式,对象赋值方法; 析构函数定义、作用及何时被调用;使用运算符 delete除动态对象的方法;缺省析构函数;对象 成员和对象成员构造函数的定义方法;对象成员 构造函数和析构函数的调用顺序; 定义构造函数的方法并能用运算符new建立动态对 象;缺省构造函数;运用对象数组;复制初始化 构造函数的定义方法。
构造函数的重载
10.1.3
与普通函数一样,只要参数的个数或类型不同, 就可以实现构造函数的重载。也就是说,一个类 可以有多个构造函数。 具有多个构造函数使得类具有更大的灵活性,即 可以根据不同的要求进行不同的初始化。与普通 函数类似,根据创建对象时对象后的<实参表>的 类型和个数,系统将会自动调用<形参表>与该<实 参表>匹配的构造函数,如果不存在相匹配的构造 函数,则系统报错。 【例10.6】构造函数的重载
C++ Programming
【例10.7】调用缺省构造函数
#include<iostream.h> class CNum { int i,j; public: void SetData(int x, int y){ i=x, j=y; } void Print(){cout<<i<<'\t'<<j<<endl;} }; void main() { CNum a1; //调用缺省构造函数 a1.Print(); //对象a1中的成 员为不确定的值 a1.SetData(3,5); C++ Programming
C++ Programming
四种方法进行初始化
用初始化列表的方法,这种方法的缺点是只能对 公有成员数据初始化,对私有和保护类型的数据 无能为力,又由于对象的封装性要求将类的成员 数据都定义为私有的,因此这种方法不常用; 通过赋值语句来实现,即将一个已经初始化的对 象赋给要初始化的对象; 通过在类中定义一个成员函数,该成员函数能够 对对象中的成员数据进行设置; 通过构造函数来进行初始化,这是一种最常用的 方法,它的特点是在创建对象的同时能自动对对 象中的成员数据进行初始化。
C++ PrograFra Baidu bibliotekming
构造函数和对象的初始化
10.1.2
C++系统规定在创建一个对象时,首先调用该对象 的构造函数,因此通常利用构造函数对对象中的 成员数据进行初始化。对构造函数的调用是隐性 的,即由编译系统自动调用,在创建对象时可以 向构造函数传递实参,一般格式为: <类名> <对象名>《(<实参表>)》; 其中<实参表>为向构造函数传递的参数,它可以 为空,该实参表必须与某个构造函数的参数的类 型和个数一致。 【例10.5】 构造函数的初始化作用
C++ Programming
【例10.5】 构造函数的初始化作用
#include <iostream.h> class CPoint { int x,y; public: CPoint(int vx,int vy); //声明构造函数 void OffSet(int ax,int ay); void Print(){ cout<<"横坐标为:"<<x<<'\n'; cout<<"纵坐标为:"<<y<<'\n'; } }; CPoint::CPoint(int vx,int vy){ //定义构 造函数 x=vx; y=vy; C++ Programming