文档详情

C++程序设计-(谭浩强超级完整版)绝对完整!![一].ppt

发布:2018-10-22约15.27万字共930页下载文档
文本预览下载声明
* 关于缺省的构造函数,说明以下几点: 1、在定义类时,只要显式定义了一个类的构造函数,则编译器就不产生缺省的构造函数 2、所有的对象在定义时,必须调用构造函数 不存在没有构造函数的对象! * class A{ float x,y; public: A(float a,float b) { x=a; y=b; } void Print(void){ coutx\tyendl; } }; void main(void) { A a1; A a2(3.0,30.0); } 显式定义了构造函数,不产生缺省的构造函数 error,定义时,没有构造函数可供调用 * 3、在类中,若定义了没有参数的构造函数,或各参数均有缺省值的构造函数也称为缺省的构造函数,缺省的构造函数只能有一个。 4、产生对象时,系统必定要调用构造函数。所以任一对象的构造函数必须唯一。 * class A{ float x,y; public: A(float a=10,float b=20){ x=a; y=b; } A(){ } void Print(void){ coutx\tyendl; } }; void main(void) { A a1; A a2(3.0,30.0); } 两个函数均为缺省的构造函数 两个构造函数均可供调用,构造函数不唯一 * 构造函数与new运算符 可以使用new运算符来动态地建立对象。建立时要自动调用构造函数,以便完成初始化对象的数据成员。最后返回这个动态对象的起始地址。 用new运算符产生的动态对象,在不再使用这种对象时,必须用delete运算符来释放对象所占用的存储空间。 用new建立类的对象时,可以使用参数初始化动态空间。 * class A{ float x,y; public: A(float a, float b) { x=a;y=b; } A() { x=0; y=0; } void Print(void) { coutx\tyendl; } }; void main(void) { A *pa1,*pa2; pa1=new A(3.0, 5.0);//用new动态开辟对象空间,初始化 pa2=new A;//用new动态开辟空间,调用构造函数初始化 pa1-Print(); pa2-Print(); delete pa1; //用delete释放空间 delete pa2; //用delete释放空间 } 5 0 0 * 析构函数 析构函数的作用与构造函数正好相反,是在对象的生命期结束时,释放系统为对象所分配的空间,即要撤消一个对象。 析构函数也是类的成员函数,定义析构函数的格式为: ClassName::~ClassName( ) { ...... // 函数体; } * 析构 函数的特点如下: 1、析构函数是成员函数,函数体可写在类体内,也可写在类体外。 2、析构函数是一个特殊的成员函数,函数名必须与类名相同,并在其前面加上字符“~”,以便和构造函数名相区别。 3、析构函数不能带有任何参数,不能有返回值,不指定函数类型。 * 在程序的执行过程中,当遇到某一对象的生存期结束时,系统自动调用析构函数,然后再收回为对象分配的存储空间。 4、一个类中,只能定义一个析构函数,析构函数不允许重载。 5、析构函数是在撤消对象时由系统自动调用的。 * class A{ float x,y; public: A(float a,float b) { x=a;y=b;cout调用非缺省的构造函数\n;} A() { x=0; y=0; cout调用缺省的构造函数\n ;} ~A() { cout调用析构函数\n;} void Print(void) { coutx\tyendl; } }; void main(void) { A a1; A a2(3.0,30.0); cout退出主函数\n; } 调用缺省的构造函数 调用非缺省的构造函数 退出主函数 调用析构函数 调用析构函数 * 在程序的执行过程中,对象如果用new运算符开辟了空间,则在类中应该定义一个析构函数,并在析构函数中使用delete删除由new分配的内存空间。因为在撤消对象时,系统自动收回为对象所分配的存储空间,而不能自动收回由new分配的动态存储空间。 * class Str{ char *Sp; int Length; public: Str(char *string) { if(strin
显示全部
相似文档