●●● ●●●●● 第10讲构造函数和析构函数 ●●●● ●●● ● 构造函数 ●析构函数 ●This指针
1 第10讲 构造函数和析构函数 ⚫ 构造函数 ⚫ 析构函数 ⚫ This 指针
●●● ●●●●● 学习目标 ●●●● ●●● ● ●理解构造函数和析构函数的作用; ●熟练掌握构造函数和析构函数的定义和使用; ●掌握构造函数的重载; 理解动态建立对象和对象数组的方法 理解This指针的作用;
学习目标 ⚫ 理解构造函数和析构函数的作用; ⚫ 熟练掌握构造函数和析构函数的定义和使用; ⚫ 掌握构造函数的重载; ⚫ 理解动态建立对象和对象数组的方法 ⚫ 理解This指针的作用; 2
●●● ●●●●● 第9讲构造函数和析构函数 ●●●● ●●● ● ●构造函数 ●析构函数 ●This指针
3 第9讲 构造函数和析构函数 ⚫ 构造函数 ⚫ 析构函数 ⚫ This 指针
●●● ●●●●● 构造函数的引入 ●●●● ●●● ● class a i float x,y, 如何实现对象成员数 public 据的快速初始化? float m n: void setxy( float a, float b xa; y=; j void print(void){cout<x<t≤<y<≤endl;} void main(void 对a1对象的公有 A al 成员数据赋初值 alm=10;al,n=20: al.Setxy(2.0, 5.0) 对a对象的私有 al. Print(; 成员数据赋初值
class A { float x,y; public: float m,n; void Setxy( float a, float b ){ x=a; y=b; } void Print(void) { cout<<x<<‘\t’<<y<<endl; } }; 构造函数的引入 void main(void) { A a1; a1.m=10; a1.n=20; a1.Setxy(2.0 , 5.0); a1.Print(); } 如何实现对象成员数 据的快速初始化? 对a1对象的公有 成员数据赋初值 对a1对象的私有 成员数据赋初值 4
●●● ●●●●● 构造函数与析构函数 ●●●● ●●● ● 构造函数和析构函数是在类体中说明的两种 特殊的成员函数。 构造函数是在创建对象时,使用给定的值来 将对象初始化
5 构造函数与析构函数 • 构造函数和析构函数是在类体中说明的两种 特殊的成员函数。 • 构造函数是在创建对象时,使用给定的值来 将对象初始化
●●● ●●●●● 构造函数 ●●●● ●●● ● 构造函数的函数名必须与类名相同。构造 函数的主要作用是完成初始化对象的数据 成员以及其它的初始化工作。 在定义构造函数时,不能指定函数返回值 的类型,也不能指定为void类型。 个类可以定义若干个构造函数。当定义 多个构造函数时,必须满足函数重载的原 则
构造函数 • 构造函数的函数名必须与类名相同。构造 函数的主要作用是完成初始化对象的数据 成员以及其它的初始化工作。 • 在定义构造函数时,不能指定函数返回值 的类型,也不能指定为void类型。 • 一个类可以定义若干个构造函数。当定义 多个构造函数时,必须满足函数重载的原 则。 6
●●● ●●●●● ●●●● 构造函数的定义 ●●● ● class 构造函数必须 为公有函数 构造函数名与 所属类名相同 public: 构造函数 无返回值 (参数表) {函数体} 构造函数的函 数体
构造函数的定义 class { public: (参数表) {函数体} } 构造函数的函 数体 构造函数名与 所属类名相同 构造函数 无返回值 构造函数必须 为公有函数 7
●●● ●●●●● 构造函数 ●●●● ●●● ● ●构造函数可以指定参数的缺省值。 若定义的类要说明该类的对象时,构造函 数必须是公有的成员函数。如果定义的类 仅用于派生其它类时,则可将构造函数定 义为保护的成员函数。 由于构造函数属于类的成员函数,它对私 有数据成员、保护的数据成员和公有的数 据成员均能进行初始化
构造函数 ⚫ 构造函数可以指定参数的缺省值。 ⚫ 若定义的类要说明该类的对象时,构造函 数必须是公有的成员函数。如果定义的类 仅用于派生其它类时,则可将构造函数定 义为保护的成员函数。 ⚫ 由于构造函数属于类的成员函数,它对私 有数据成员、保护的数据成员和公有的数 据成员均能进行初始化。 8
●●● ●●●●● ●●●● 构造函数 ●●● ● 属性 构造函数 目的 类的公有成员函数 实现成员数据初始化 实现 私有数据成 保护数据成员 公有数据成员
私有数据成员 保护数据成员 构造函数 属性 构造函数 公有数据成员 类的公有成员函数 目的 实现成员数据初始化 实现 9
●●● ●●●●● ●●●● 例1 ●●● ● class a 构造函数 float x, y; 初始化对象 public A(float a, float b( x=a; y=b; / float Sum(void)i return X+y;) Print(void) cout<<x<<x<<It'<y=<<y<<end; void main(void 定义时调用构造 {Aal(2.0,3.0) 函数进行成员数 Aa2(1.0,2,0); 据的初始化 al. Print(; a2. Print(; x-2y=3 X=1y=2
例1: class A { float x,y; public: A(float a,float b){ x=a; y=b;}// float Sum(void) { return x+y;} Print(void) { cout<<"x="<<x<<'\t'<<"y="<<y<<endl;} }; void main(void) { A a1(2.0, 3.0); A a2(1.0,2.0); a1.Print(); a2.Print(); } 构造函数, 初始化对象 定义时调用构造 函数进行成员数 据的初始化 x=2 y=3 x=1 y=2 10