北大青鸟C++ 4

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Version3.0特殊的函数第四章2回顾类成员变量成员函数this指针对象数组3目标复制构造函数复制赋值操作符类型转换构造函数类型转换函数4复制构造函数3-1在下列情况,会调用复制构造函数将某个对象初始化为类的另一个对象时将对象当作参数传递给函数时函数返回对象时5复制构造函数3-2如果没有定义复制构造函数,编译器将自动生成一个自动生成的复制构造函数只是将对象内容逐个字节地copy当数据成员有指针时,将导致两个对象的指针指向同一个地址6复制构造函数3-3定义以对象的引用作为参数的构造函数X::X(X&ptr)或X::X(constX&ptr)使用const关键字,可以确保复制过程不会意外地更改源对象7赋值操作符4-1默认的赋值操作符只是逐个字节地将源对象复制到目标对象#includeiostream.hclassVar1{int*ptr;public:Var1(){ptr=newint;*ptr=0;}Var1(inti){ptr=newint;*ptr=i;}voidshow(){cout*ptrendl;}};voidmain(){Var1s1(20);Var1s2;s2.show();s2=s1;s2.show();}s2的ptr和s1的ptr指到同一个位置8赋值操作符4-2演示默认的赋值操作符9赋值操作符4-3增加:Var1&operator=(constVar1&s){*ptr=*(s.ptr);return*this;}两个对象的ptr指向不同的位置10赋值操作符4-4演示自定义赋值操作符11类型转换构造函数4-1基本数据类型用户自定义类型Distance(floatm){floatf;f=(float)3.28*m;feet=int(f);inches=12*(f-feet);}Distanced1=1.25;12类型转换构造函数4-2演示基本数据类型到用户自定义类型的转换13类型转换构造函数4-3用户自定义类型用户自定义类型LFeet::LFeet(LMetresdm){floatffeet;ffeet=float(3.28*dm.GetMetres());feet=int(ffeet);inches=int(12*(ffeet-feet));}intLMetres::GetMetres(){returnmetre;}14类型转换构造函数4-4演示用户自定义类型的互转15类型转换函数编译器对用户自定义的类型一无所知,必须定义转换函数基本数据类型用户自定义类型类型转换函数用户自定义类型用户自定义类型16从用户自定义类型到基本类型operatorfloat()//转换函数是类型转换操作符的重载{floatf;f=inches/12;f=feet+f;return(float)(f/3.28);}Distanced1(4,1.2f);Distanced2(6,6.72f);floatm=float(d1);//显式调用转换函数m=d2;//隐式调用转换函数17不同类的对象的转换编译器对用户自定义的类型一无所知,必须指定转换函数objectA=objectB;两种实现方法在目标类中定义的类型转换构造函数(已介绍)在源类中定义的转换函数目标类的对象源类的对象18源类中的转换函数operatorDistFeet(){floatf_feet;floatinches;inti_feet;f_feet=(float)3.28*meters;i_feet=int(f_feet);inches=12*(f_feet-i_feet);return(DistFeet(i_feet,inches));}DistMetersdm1=1.0;DistFeetdf1;df1=dm1;//隐式使用转换函数或df1=DistFeet(dm1);//显式使用转换函数19类型转换表转换类型目标类中的函数源类中的函数从基本类型到类构造函数不可以从类到基本类型不可以转换函数从类到类构造函数转换函数20总结复制构造函数复制赋值操作符类型转换构造函数类型转换函数

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功