第8讲构造函数和析构函数 教学目的与要求: 了解类对象的创建和撤消过程。 掌握构造函数和析构函数的定义和使用 教学内容提要: 1、构造函数 2、析构函数 教学重点:构造函数和析构函数的定义和使用 教学难点:构造函数的定义和使用。 教学进度:P61~P70 教学过程:
第8讲 构造函数和析构函数 •教学目的与要求: 了解类对象的创建和撤消过程。 掌握构造函数和析构函数的定义和使用。 •教学内容提要: 1、构造函数; 2、析构函数; •教学重点:构造函数和析构函数的定义和使用。 •教学难点:构造函数的定义和使用。 •教学进度:P61~P70 •教学过程:
(81构造函数】 在声明对象时,也可以对其数据成员初始化。对象数据成员的初始化需要 通过类的特殊成员函数来进行,这个成员函数就是构造函数 构造函数是类的特殊成员函数,用于在声明类的对象时对其进行初始化。 构造函数的函数名应与类名相同,构造函数中的参数根据需要可有可无。 不能为其指定返回值类型,甚至连vod也不可以。 构造函数应被声明为公有函数,它只能在创建类的对象时由系统自动调 用,对对象进行初始化,程序的其他部分不能调用 例8-1圆柱体类构造函数不带参数的情形 class cylinder public Cylinder(; void setcylinder(doubler, double h);
在声明对象时,也可以对其数据成员初始化。对象数据成员的初始化需要 通过类的特殊成员函数来进行,这个成员函数就是构造函数。 构造函数是类的特殊成员函数,用于在声明类的对象时对其进行初始化。 构造函数的函数名应与类名相同,构造函数中的参数根据需要可有可无。 不能为其指定返回值类型,甚至连void也不可以。 构造函数应被声明为公有函数,它只能在创建类的对象时由系统自动调 用,对对象进行初始化,程序的其他部分不能调用。 class Cylinder { public: Cylinder( ); void setcylinder(double r,double h); 例 8-1 圆柱体类构造函数不带参数的情形 【 8.1 构造函数】
double getradius(; double getheight0; double volumed; double surface area 0; private: double radius: double height; Cylinder: Cylinder( radius=5.0 height=10.0 例82(圆柱体类构造函数带有参数的情形 class cylinder public: Cylinder(doubler, double h); void setcylinder(double r, double h);
double getradius(); double getheight(); double volume(); double surface_area(); private: double radius; double height; }; Cylinder::Cylinder( ) { radius=5.0; height=10.0; } class Cylinder { public: Cylinder(double r,double h); void setcylinder(double r,double h); 例 8-2 圆柱体类构造函数带有参数的情形
double getradius(; double getheight0; double volumed; double surface area 0; private: double radius: 米 double height; Cylinder: Cylinder(double r, double h radius-r, height=h 在声明对象时,就必须利用实参对对象进行初始化 例如 ylinder cylinder(2.0, 3.0) Cylinder cylinder;∥错误,没有提供用于初始化的实参 在声明对象时,如果相应的构造函数没有形参,括号应该省略 (续)
double getradius(); double getheight(); double volume(); double surface_area(); private: double radius; double height; }; Cylinder::Cylinder(double r,double h) { radius=r; height=h; } 在声明对象时,就必须利用实参对对象进行初始化。 例如: Cylinder cylinder1(2.0,3.0); Cylinder cylinder1; //错误,没有提供用于初始化的实参 在声明对象时,如果相应的构造函数没有形参,括号应该省略。 (续)
若是声明对象数组,应该采用下述形式: Cylinder cylinder [3]= Cylinder (1.0,2.0), Cylinder(3.0,4.0), Cylinder(5.0, 6.0) 构造函数也可以定义为内联函数,可以带默认形参值,也可以重载 例83(构造函数的重载 第1部分 这个程序在【例3-9】的基础上增加了构造函数 /EXAMPLE.H #includesiosteam.h> 说明:对类 Cylinder的构造 class cylinder 函数进行了重载。 public: lindert ∥构造函数 没有形参,函 Cylinder(doubler, double h); /构造函数数体也为空 void setcylinder(double r, double h) double getradius( 有两个形参。 return radius:
若是声明对象数组,应该采用下述形式: Cylinder cylinder1[3]={ Cylinder (1.0,2.0),Cylinder(3.0,4.0),Cylinder(5.0,6.0)}; 构造函数也可以定义为内联函数,可以带默认形参值,也可以重载。 //这个程序在【例3 - 9】的基础上增加了构造函数 //EXAMPLE.H #include<iosteam.h> class Cylinder{ public: Cylinder(){} //构造函数 Cylinder(double r,double h); //构造函数 void setcylinder(double r,double h); double getradius() { return radius; } 构造函数的重载 第1部分 说明:对类Cylinder的构造 函数进行了重载。 没有形参,函 数体也为空。 有两个形参。 例 8-3