第6章类与对象 6.1类与对象 6.14类的成员函数(续二) 3.带默认参数值的成员函数 注意:默认参数只能在声明或定义中的一处给出,即 如在类中的函数声明已经给出默认参数值: void Set size int =100, int w=100) 则在函数定义时就不能再给出默认值 同样如果在定义时给出了默认值: void CRect Set Size(int 1=100, int W=100) length=l width W 在声明处就不能再给默认值了。 返回
6.1 类与对象 6.1.4 类的成员函数(续二) 3. 带默认参数值的成员函数 注意:默认参数只能在声明或定义中的一处给出,即 如在类中的函数声明已经给出默认参数值: void SetSize(int l=100, int w=100); 则在函数定义时就不能再给出默认值。 同样如果在定义时给出了默认值: void CRect::SetSize(int l=100, int w=100) { length=l; width = w; } 在声明处就不能再给默认值了。 第6章 类与对象 返 回
第6章类与对象 6.2构造函数与析构函数 构造函数:对对象进行初始化。 析构函数:在对象销毁时进行内存释放等清理工作。 621构造函数 1.构造函数的特点 (1)构造函数的函数名与类名相同 (2)不能定义构造函数的类型(即不能指明构造函数返回值的 类型) (3)构造函数应声明为公有函数。 (4)构造函数不能在程序中调用,在对象创建时,构造函数被 系统自动调用。 2构造函数的作用 构造函数的作用就是在对象被创建时利用特定的值构造对象, 将对象初始化为一个特定的状态,使此对象具有区别于其它对象 的特征
6.2 构造函数与析构函数 构造函数:对对象进行初始化。 析构函数:在对象销毁时进行内存释放等清理工作。 6.2.1 构造函数 1. 构造函数的特点 (1) 构造函数的函数名与类名相同。 (2) 不能定义构造函数的类型(即不能指明构造函数返回值的 类型)。 (3) 构造函数应声明为公有函数。 (4) 构造函数不能在程序中调用,在对象创建时,构造函数被 系统自动调用。 2. 构造函数的作用 构造函数的作用就是在对象被创建时利用特定的值构造对象, 将对象初始化为一个特定的状态,使此对象具有区别于其它对象 的特征。 第6章 类与对象
第6章类与对象 例为CRec类添加构造函数 class CRect private: char color[10]; public CRect(; CRect(char*C, int t, int left, int len, int wid); void SetColor(char*c); 二者是重载函数,在定义对象时, 如果不给出参数,就自动调用第 CRect: C Recto 个构造函数,如果给定5个参数就 自动调用第二个构造函数。 strcpy(color, Black) top=0 left=o length=0; width =0
例 为CRect类添加构造函数 class CRect { private: char color[10]; …… public: CRect( ); CRect(char *c, int t, int left, int len, int wid); void SetColor(char *c); …… }; CRect::CRect() { strcpy(color, "Black"); top = 0; left = 0; length = 0; width = 0; } 二者是重载函数,在定义对象时, 如果不给出参数,就自动调用第一 个构造函数,如果给定5个参数就 自动调用第二个构造函数。 第6章 类与对象
第6章类与对象 例为 CRect类添加构造函数(续) CRect: CRect(char*C, int t, int lef, int len, int wid) strcpy(color, c) top= t left= let length= len width wid void maino C Rect r1 ∥自动调用第一个构造函数 CRect r2(“red",10,10,100,100);∥自动调用第二个构造函数 CRect r3(" green",200,200,50,50);∥自动调用第二个构造函数 r1. Draw r2. Draw r3. Draw
例 为CRect类添加构造函数(续) CRect::CRect(char *c, int t, int lef, int len, int wid ) { strcpy(color, c); top = t; left = lef; length = len; width = wid; } void main() { CRect r1; //自动调用第一个构造函数 CRect r2(“red”, 10,10,100,100); //自动调用第二个构造函数 CRect r3("green", 200,200,50,50); //自动调用第二个构造函数 r1.Draw(); r2.Draw(); r3.Draw(); } 第6章 类与对象
第6章类与对象 6.2构造函数与析构函数 622析构函数 1.析构函数的特点 (1)析构函数名字为符号“~”加类名。 (2)析构函数没有参数,不能指定返回值类型。 (3)一个类中只能定义一个析构函数,所以析构函数不能重载。 (4)当一个对象作用域结束时,系统自动调用析构函数 如 CRect类的析构函数声明为:~ CRect(0; 定义为: CRect:- CRect(0 2析构函数的作用 在删除一个对象前被调用,释放该对象成员的内存空间,以 及其它一些清理工作
6.2 构造函数与析构函数 6.2.2 析构函数 1. 析构函数的特点 (1) 析构函数名字为符号“~”加类名。 (2) 析构函数没有参数,不能指定返回值类型。 (3) 一个类中只能定义一个析构函数,所以析构函数不能重载。 (4) 当一个对象作用域结束时,系统自动调用析构函数。 如CRect类的析构函数声明为:~CRect(); 定义为: CRect::~CRect() { …… } 2. 析构函数的作用 在删除一个对象前被调用,释放该对象成员的内存空间,以 及其它一些清理工作。 第6章 类与对象