四章类与对象.ppt
文本预览下载声明
构造函数的实现: Clock::Clock(int NewH, int NewM, int NewS) { Hour=H; Minute=M; Second=S; } 建立对象时构造函数的作用: void main ( ) { Clock c (0,0,0); // 隐含调用构造函数,将初始值作为实参。 c.ShowTime ( ) ; } 前一页 休息 32 拷贝构造函数 拷贝构造函数是一种特殊的构造函数,其形参为 本类的对象引用。 class 类名 { public : 类名(形参); // 构造函数 类名(类名 对象名); // 拷贝构造函数 ... } ; 类名 :: 类名(类名 对象名) // 拷贝构造函数的实现 { 函数体 } 构 造 函 数 和 析 构 函 数 前一页 休息 33 例 4-2 拷贝构造函数举例 class Point { public: Point(int xx=0,int yy=0){X=xx; Y=yy;} Point(Point p); int GetX ( ) {return X;} int GetY ( ) {return Y;} private: int X,Y; }; 构 造 函 数 和 析 构 函 数 Point::Point (Point p) { X=p.X; Y=p.Y; ???潣瑵? 拷贝构造函数被调用 endl; } 前一页 休息 35 例 4-2 拷贝构造函数举例 ? 当用类的一个对象去初始化该类的另一 个对象时系统自动调用它实现拷贝赋值。 void main(void) { Point A(1,2); Point B(A); // 拷贝构造函数被调用 coutB.GetX ( ) endl; } 构 造 函 数 和 析 构 函 数 前一页 休息 36 拷贝构造函数举例 ( 例 4-2) ? 若函数的形参为类对象,调用函数时, 实参赋值给形参,系统自动调用拷贝 构造函数。例如: void fun1(Point p) { coutp.GetX ( ) endl; } void main ( ) { Point A(1,2); fun1(A); // 调用拷贝构造函数 } 构 造 函 数 和 析 构 函 数 前一页 休息 37 拷贝构造函数举例 ( 例 4-2) ? 当函数的返回值是类对象时,系统自动调用 拷贝构造函数。例如: Point fun2 ( ) { Point A(1,2); return A; // 调用拷贝构造函数 } void main ( ) { Point B; B=fun2 ( ) ; } 构 造 函 数 和 析 构 函 数 前一页 休息 38 拷贝构造函数 如果程序员没有为类声明拷贝初始 化构造函数,则编译器自己生成一个拷 贝构造函数。 这个构造函数执行的功能是:用作 为初始值的对象的每个数据成员的值, 初始化将要建立的对象的对应数据成员。 构 造 函 数 和 析 构 函 数 前一页 休息 39 析构函数 ? 完成对象被删除前的一些清理工作。 ? 在对象的生存期结束的时刻系统自动 调用它,然后再释放此对象所属的空 间。 ? 如果程序中未声明析构函数,编译器 将自动产生一个缺省的析构函数。 构 造 函 数 和 析 构 函 数 前一页 休息 40 构造函数和析构函数举例 #includeiostream.h class Point { public: Point(int xx,int yy); ~Point ( ) ; //... 其它函数原形 private: int X,int Y; }; 构 造 函 数 和 析 构 函 数 Point::Point(int xx,int yy) { X=xx; Y=yy; } Point
显示全部