《类组合成员初始化》PPT课件.ppt
《《类组合成员初始化》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《类组合成员初始化》PPT课件.ppt(31页珍藏版)》请在三一办公上搜索。
1、1,C+中,提供了用一个对象值创建并初始化另一个对象的方法,完成该功能的是拷贝构造函数。例如:Tdate d1(2002,3,1);Tdate d2(d1);用构造函数创建d1 的值初始化新创建的对象d2。拷贝构造函数的特点:1、拷贝构造函数名字与类同名,没有返回类型;2、拷贝构造函数只有一个形参数,该参数是该类的对象的引用;,拷贝构造函数(Copy Constructor),拷贝构 造 函 数,2,3、拷贝构造函数的格式如下::(/拷贝构造函数,拷贝构 造 函 数,3,int xcoord()return x;int ycoord()return y;private:int x,y;Tpoi
2、nt:Tpoint(Tpoint,拷贝构 造 函 数,4,void main()Tpoint p1(5,7);Tpoint p2(p1);cout“p2=”p2.xcoord()“,”p2.ycoord()endl;,结果:Copy_initialization constructor called.P2=5,7,拷贝构 造 函 数,5,注意:如果一个类中没有定义拷贝构造函数,则系统自动生成一个缺省拷贝构造函数,其功能是将已知对象的所有数据成员的值拷贝给对应对象的数据成员。,class A float x,y;public:A(float a,float b)x=a;y=b;cout调用了构造
3、函数n;void Print()coutxtyendl;,拷贝构 造 函 数,6,调用了构造函数1.02.01.02.01.02.0,void main(void)A a1(1.0,2.0);A a2(a1);A a3=a1;/可以这样赋值 a1.Print();a2.Print();a3.Print();,拷贝构 造 函 数,7,拷贝构造函数举例,class Point public:Point(int xx=0,int yy=0)X=xx;Y=yy;Point(Point,拷贝构 造 函 数,8,拷贝构造函数调用,(1)当用类的一个对象去初始化该类的另一个对象时系统自动调用拷贝构造函数实现
4、拷贝赋值。void main(void)Point A(1,2);Point B(A);/拷贝构造函数被调用 coutB.GetX()endl;,拷贝构 造 函 数,9,(2)若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。例如:void fun1(Point p)coutp.GetX()endl;void main()Point A(1,2);fun1(A);/调用拷贝构造函数,拷贝构 造 函 数,10,(3)当函数的返回值是类对象时,系统自动调用拷贝构造函数。例如:Point fun2()Point A(1,2);return A;/调用拷贝构造函数void m
5、ain()Point B;B=fun2();,拷贝构 造 函 数,11,注意:,如果程序员没有为类声明拷贝初始化构造函数,则编译器自己生成一个拷贝构造函数。这个构造函数执行的功能是:用作为初始值的对象的每个数据成员的值,初始化将要建立的对象的对应数据成员。,拷贝构 造 函 数,12,构造函数和析构函数举例,#includeusing namespace std;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
6、:Point()/.其它函数的实现略,构 造 函 数 和 析 构 函 数,13,构造函数和析构函数调用举例,#include using namespace std;class Q int x,y;public:Q(int a=0,int b=0)cout“调用了构造函数”endl;x=a;y=b;void P(void)coutxtyn;Q()cout“调用了析构函数!”n;,void main(void)Q q(50,100);q.P();cout“退出主数!”n”;,输出:调用了构造函数50 100退出主函数!调用了析构函数!,构 造 函 数 和 析 构 函 数,14,类的应用举例,一圆
7、型游泳池如图所示,现在需在其周围建一圆型过道,并在其四周围上栅栏。栅栏价格为35元/米,过道造价为20元/平方米。过道宽度为3米,游泳池半径由键盘输入。要求编程计算并输出过道和栅栏的造价。,构 造 函 数 和 析 构 函 数,15,#include using namespace std;const float PI=3.14159;const float FencePrice=35;const float ConcretePrice=20;class Circle/声明类Circle 及其数据和方法 private:float radius;public:Circle(float r);/构
8、造函数 float Circumference();/圆周长 float Area();/圆面积;Circle:Circle(float r)/构造函数初始化数据成员radiusradius=r;float Circle:Circumference()/计算圆的周长 return 2*PI*radius;float Circle:Area()/计算圆的面积 return PI*radius*radius;,构 造 函 数 和 析 构 函 数,16,void main()float radius;float FenceCost,ConcreteCost;coutradius;Circle Poo
9、l(radius);/声明 Circle 对象 Circle PoolRim(radius+3);FenceCost=PoolRim.Circumference()*FencePrice;/计算栅栏造价并输出 cout Fencing Cost is¥FenceCost endl;ConcreteCost=(PoolRim.Area()-Pool.Area()*ConcretePrice;/计算过道造价并输出 cout Concrete Cost is¥ConcreteCost endl;,运行结果Enter the radius of the pool:10Fencing Cost is¥2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 类组合成员初始化 组合 成员 初始化 PPT 课件
链接地址:https://www.31ppt.com/p-5640913.html