欢迎来到天天文库
浏览记录
ID:59476373
大小:174.00 KB
页数:33页
时间:2020-09-14
《c++中构造函数和析构函数ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VisualC++程序设计第10章构造函数和析构函数10.1构造函数10.2析构函数10.3实现类型转换和拷贝的构造函数10.4构造函数和对象成员第10章构造函数和析构函数给对象的数据成员赋值有二类(四种)方法:1.定义时赋值(初始化)(1)用数据列表初始化(数据成员为公有访问权限);(2)用构造函数初始化。2.定义后赋值(1)用成员函数赋值----回顾第9章示例3;(2)用同类型的对象赋值。如:classA{public:inta,b;voidset(intx,inty){a=x;b=y;}};voi
2、dmain(){Aa1={5,10},a2,a3;a2.set(15,20);a3=a1;}10.1构造函数10.1.1构造函数的概念1.构造函数是实现数据成员初始化的特殊的成员函数;2.构造函数与类同名,没有类型,也不返回值;3.创建对象时,构造函数被自动调用。每创建一个对象都必须调用一次构造函数,每调用一次构造函数必定创建一个对象。10.1.2构造函数的种类1.普通构造函数:普通参数;2.拷贝构造函数:参数为对象的引用。一个类至少有上述两个构造函数,可以有更多的构造函数(构造函数允许重载),以实现不同形式对象的创
3、建。10.1构造函数10.1.3构造函数的定义1.类中定义格式类名(形参列表){...}//函数体,对数据成员赋值2.类中说明,类外定义(1)类中说明类名(形参列表);(2)类外定义类名::类名(形参列表){...}//函数体10.1构造函数例10-1定义表示平面点的类Point及其构造函数。classPoint{floatx,y;public:Point(floata,floatb);Point(floata){x=y=a;}voidprint(){cout<<‘(‘<4、”;}};Point::Point(floata,floatb){x=a;y=b;}10.1构造函数10.1.4构造函数产生对象建立对象时,必须提供与构造函数形参一致的实参,其基本格式只有如下两种形式:类名对象名(实参);类名对象名;例10-2用例10-1定义的类定义对象,并初始化。classPoint{floatx,y;public:Point(floata,floatb);Point(floata){x=y=a;}voidprint(){cout<<‘(‘<5、int::Point(floata,floatb){x=a;y=b;}voidmain(){Pointp1(5),p2(10,15);p1.print();p2.print();}10.1构造函数主函数中,能否添加下列语句:Pointp3;10.1.5缺省的构造函数1.缺省构造函数的种类(1)系统自动产生的构造函数,如下所示:类名(){}(2)用户定义的没有参数的构造函数;(3)用户定义的所有参数都有缺省值的构造函数。2.用缺省构造函数创建对象的格式:类名对象名;3.使用时的注意(1)只有在用户没有定义构造函数时,6、系统才自动产生构造函数;(2)类中可能没有缺省的构造函数;(3)一个类最多只能有一个缺省的构造函数。10.1构造函数例10-3缺省构造函数的使用。classPoint{floatx,y;public:Point(){x=0;y=0;}Point(floata,floatb){x=a;y=b;}//Avoidprint(){cout<<‘(‘<7、否增加:Pointp3();p3.print();能否对A行作如下修改?=0=010.1.6构造函数和new运算符1.用new运行符产生动态对象(1)产生单个对象(可以初始化);(2)产生数组对象(不能初始化)。如:classC{floatr,i;public:C(floatr1,floati1){r=r1;i=i1;cout<<“构造”;}C(){r=i=0;cout<<“缺省构造”;}};voidmain(){C*p1=newC,*p2=newC(2,-3),*p3=newC[5];}108、.1构造函数2.用new为指针成员分配动态空间当类的数据成员为指针时,在构造函数中应:·先用new运算符为指针动态分配空间;·然后再对指针所指空间赋值。如:classArray{int*p;...};//p表示10个元素的一维数组则如下的构造函数都是错误的:Array(int*t){p=t;}Arr
4、”;}};Point::Point(floata,floatb){x=a;y=b;}10.1构造函数10.1.4构造函数产生对象建立对象时,必须提供与构造函数形参一致的实参,其基本格式只有如下两种形式:类名对象名(实参);类名对象名;例10-2用例10-1定义的类定义对象,并初始化。classPoint{floatx,y;public:Point(floata,floatb);Point(floata){x=y=a;}voidprint(){cout<<‘(‘<5、int::Point(floata,floatb){x=a;y=b;}voidmain(){Pointp1(5),p2(10,15);p1.print();p2.print();}10.1构造函数主函数中,能否添加下列语句:Pointp3;10.1.5缺省的构造函数1.缺省构造函数的种类(1)系统自动产生的构造函数,如下所示:类名(){}(2)用户定义的没有参数的构造函数;(3)用户定义的所有参数都有缺省值的构造函数。2.用缺省构造函数创建对象的格式:类名对象名;3.使用时的注意(1)只有在用户没有定义构造函数时,6、系统才自动产生构造函数;(2)类中可能没有缺省的构造函数;(3)一个类最多只能有一个缺省的构造函数。10.1构造函数例10-3缺省构造函数的使用。classPoint{floatx,y;public:Point(){x=0;y=0;}Point(floata,floatb){x=a;y=b;}//Avoidprint(){cout<<‘(‘<7、否增加:Pointp3();p3.print();能否对A行作如下修改?=0=010.1.6构造函数和new运算符1.用new运行符产生动态对象(1)产生单个对象(可以初始化);(2)产生数组对象(不能初始化)。如:classC{floatr,i;public:C(floatr1,floati1){r=r1;i=i1;cout<<“构造”;}C(){r=i=0;cout<<“缺省构造”;}};voidmain(){C*p1=newC,*p2=newC(2,-3),*p3=newC[5];}108、.1构造函数2.用new为指针成员分配动态空间当类的数据成员为指针时,在构造函数中应:·先用new运算符为指针动态分配空间;·然后再对指针所指空间赋值。如:classArray{int*p;...};//p表示10个元素的一维数组则如下的构造函数都是错误的:Array(int*t){p=t;}Arr
5、int::Point(floata,floatb){x=a;y=b;}voidmain(){Pointp1(5),p2(10,15);p1.print();p2.print();}10.1构造函数主函数中,能否添加下列语句:Pointp3;10.1.5缺省的构造函数1.缺省构造函数的种类(1)系统自动产生的构造函数,如下所示:类名(){}(2)用户定义的没有参数的构造函数;(3)用户定义的所有参数都有缺省值的构造函数。2.用缺省构造函数创建对象的格式:类名对象名;3.使用时的注意(1)只有在用户没有定义构造函数时,
6、系统才自动产生构造函数;(2)类中可能没有缺省的构造函数;(3)一个类最多只能有一个缺省的构造函数。10.1构造函数例10-3缺省构造函数的使用。classPoint{floatx,y;public:Point(){x=0;y=0;}Point(floata,floatb){x=a;y=b;}//Avoidprint(){cout<<‘(‘<7、否增加:Pointp3();p3.print();能否对A行作如下修改?=0=010.1.6构造函数和new运算符1.用new运行符产生动态对象(1)产生单个对象(可以初始化);(2)产生数组对象(不能初始化)。如:classC{floatr,i;public:C(floatr1,floati1){r=r1;i=i1;cout<<“构造”;}C(){r=i=0;cout<<“缺省构造”;}};voidmain(){C*p1=newC,*p2=newC(2,-3),*p3=newC[5];}108、.1构造函数2.用new为指针成员分配动态空间当类的数据成员为指针时,在构造函数中应:·先用new运算符为指针动态分配空间;·然后再对指针所指空间赋值。如:classArray{int*p;...};//p表示10个元素的一维数组则如下的构造函数都是错误的:Array(int*t){p=t;}Arr
7、否增加:Pointp3();p3.print();能否对A行作如下修改?=0=010.1.6构造函数和new运算符1.用new运行符产生动态对象(1)产生单个对象(可以初始化);(2)产生数组对象(不能初始化)。如:classC{floatr,i;public:C(floatr1,floati1){r=r1;i=i1;cout<<“构造”;}C(){r=i=0;cout<<“缺省构造”;}};voidmain(){C*p1=newC,*p2=newC(2,-3),*p3=newC[5];}10
8、.1构造函数2.用new为指针成员分配动态空间当类的数据成员为指针时,在构造函数中应:·先用new运算符为指针动态分配空间;·然后再对指针所指空间赋值。如:classArray{int*p;...};//p表示10个元素的一维数组则如下的构造函数都是错误的:Array(int*t){p=t;}Arr
此文档下载收益归作者所有