7133程序设计实习内容摘要:
{ //添加一件武器 if( nWeaponIdNum amp。 amp。 nWeaponIdNum % 20 == 0 ) { //满 20件就重新分配空间 int * pTmp = new int[nWeaponIdNum+20]。 memcpy( pTmp,pWeapons, nWeaponIdNum * sizeof(int))。 delete [] pWeapons。 pWeapons = pTmp。 } pWeapons[nWeaponIdNum++] = nWeaponId。 } 构造函数和析构函数什么时候被调用。 chunk ck1,ck2。 // main 执行前即调用构造函数void MyFunction() { static chunk ck。 //函数执行前调用构造函数 chunk tmpCk。 // tmpCk 构造函数调用 ....//函数退出时 tmpCk消亡, 调用析构函数 } main () { chunk tmpCk2。 chunk * pCk。 MyFunction ()。 pCk = new chunk。 // 构造函数被调用 .... delete pCk。 // 析 构函数被调用 } //main函数退出时 tmpCk2消亡, 调用析构函数。 程序结束前, ck ,ck1, ck2 的析构函数被调用 class Demo { int id。 public: Demo(int i) { id = i。 printf( id=%d,Construct\n,id)。 } ~Demo() { printf( id=%d,Destruct\n,id)。 } }。 Demo d1(1)。 void fun() { static Demo d2(2)。 Demo d3(3)。 printf( fun \n)。 } void main () { Demo d4(4)。 printf( main \n)。 { Demo d5(5)。 } fun()。 printf( endmain \n)。 } 输出: id=1,Construct id=4,Construct main id=5,Construct id=5,Destruct id=2,Construct id=3,Construct fun id=3,Destruct endmain id=4,Destruct id=2,Destruct id=1,Destruct 关于复制构造函数和析构函数的一个例子 include class CMyclass { public: CMyclass() {}。 CMyclass( CMyclass amp。 c) { cout copy constructor endl。 } ~CMyclass() { cout destructor endl。 } }。 void fun(CMyclass obj_ ) { cout fun endl。 } CMyclass c。 CMyclass Test( ) { cout test endl。 return c。 } void main(){ CMyclass c1。 fun( c1)。 Test()。 } 运行结果: copy constructor fun destructor //参数消亡 test copy constructor destructor // 返回值临时对象消亡 destructor // 局部变量消亡 destructor // 全局变量消亡 /// 标题:五子棋作业 _学号 _姓名 复制构造函数和静态变量的一个例子 class Apple { private : int nWeight。 static int nTotalWeight。 static int nTotalNumber。 public: Apple( int w)。 ~Apple( )。 static void PrintTotal()。 }。 Apple::Apple( int w) { nWeight = w。 nTotalWeight += w。 nTotalNumber ++。 } Apple::~Apple() { nTotalWeight = nWeight。 nTotalNumber。 } void Apple::PrintTotal () { printf( “%d,%d”, nTotalWeight, nTotalNumber)。 } int Apple::nTotalWeight = 0。 int Apple::nTotalNumber = 0。 int main () { Apple p1(3), p2( 5)。 Apple::nTotalWeight = 6。 // Wrong , 私有 Apple::PrintTotal()。 ()。 } 上面 Apple类的不足之处:在使用 Apple类的过程中,有时会调用复制构造函数生成临时的隐藏的 Apple对象 (比如,调用一个以 Apple类对象作返回值的函数时)那么临时对象在消亡时会调用析构函数,减少nTotalNumber 和 nTotalWeight的值,可是这些临时对象在生成时却没有增加 nTotalNumber 和 nTotalWeight的值。 因此要为 Apple类写一个复制构造函数 Apple::Apple( Apple amp。 a ) { nWeight =。 nTotalWeight +=。 nTotalNumber ++。 } 对象的赋值 缺省的情况下,对象间的赋值执行的是按位拷贝 CHero c1,c2。 c1 = c2。 // c1的所有成员变量变成和 c2一样 如果赋值运算符被重载,那么情况就会不一样了,以后会介绍 构造函数和析构函数小结 构造函数 定义 调用方式 (隐式 ) 复制构造函数 • 析造函数 – 定义 – 调用时机 • 各种构造函数和析构函数的调用时机 构造函数(调用方式) 定义对象变量时: CHero c1, c2(2),c3(3,5)。 创建新变量对象时: CHero * pc1 = new CHero。 CHero * pc2 = new CHero (3,4); 创建数组对象时 : Test array1[3] = { 1, Test(1,2) }。 Test * pArray[3] = { new Test( 4), new Test(1。7133程序设计实习
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。