文档详情

c构造函数和析构函数.ppt

发布:2017-04-18约8.25千字共53页下载文档
文本预览下载声明
第十章 构造函数和析构函数;构造函数和析构函数是在类体中说明的两种特殊的成员函数。;构造函数是类的成员函数,系统约定构造函数名必须与类名相同。构造函数提供了初始化对象的一种简单的方法。;class A{ float x,y; public: A(float a,float b){ x=a; y=b;}//构造函数,初始化对象 float Sum(void) { return x+y; } void Set(float a,float b) { x=a; y=b;} Print(void) { coutx=x\ty=yendl;} }; void main(void) { A a1(2.0, 3.0);//定义时调用构造函数初始化 A a2(1.0,2.0); a2.Set(10.0, 20.0); //利用成员函数重新为对象赋值 a1.Print(); a2.Print(); };对构造函数,说明以下几点: 1.构造函数的函数名必须与类名相同。构造函数的主要作用是完成初始化对象的数据成员以及其它的初始化工作。 2. 在定义构造函数时,不能指定函数返回值的类型,也不能指定为void类型。 3. 一个类可以定义若干个构造函数。当定义多个构造函数时,必须满足函数重载的原则。;4.构造函数可以指定参数的缺省值。;class A{ float x,y; public: A(float a, float b=10) { x=a; y=b; } A() { x=0; y=0;} void Print(void) { coutx\tyendl; } }; void main(void) { A a1, a2(20.0), a3(3.0, 7.0); a1.Print(); a2.Print(); a3.Print(); } ;每一个对象必须要有相应的构造函数;对局部对象,静态对象,全局对象的初始化对于局部对象,每次定义对象时,都要调用构造函数。 对于静态对象,是在首次定义对象时,调用构造函数的,且由于对象一直存在,只调用一次构造函数。 对于全局对象,是在main函数执行之前调用构造函数的。;class A { int x,y; public: A(int a){ x=a; cout“1\n”;} A(int a, int b) { x=a,y=b;cout“2\n”;} }; A a1(3); void f(void) { A b(2,3);} void main(void) { A a2(4,5); f(); f(); };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(float a){ x=a; y=0; cout初始化全局对象\n; } void Print(void){ coutx\tyendl; } }; A a0(100.0);//定义全局对象 void f(void) { cout 进入f()函数\n;A a2(1,2); static A a3; //初始化局部静态对象 } void main(void) { cout进入main函数\n; A a1(3.0, 7.0);//定义局部自动对象 f(); f(); };缺省的构造函数 ;class A{ float x,y; public: A(){ }//缺省的构造函数,编译器自动产生,可以不写 float Sum(void) { return x+y; } void Set(float a,float b) { x=a; y=b;} void Print(void) { coutx=x\ty=yendl; } }; void main(void) { A a1,a2;//产生对象时,自动调用缺省的构造函数,不赋值 a1.Set (2.0,4.0); couta1: ; a1.Print (); couta1.sum=a1.Sum ()endl; a2.Print();//打印随机值 };关于缺省的构造函数,说明以下几点: 1、在定义类时,只要显式定义了一个类的构造函数,则编译器就不产生缺省的构造函数;cla
显示全部
相似文档