资源描述:
《c基础程序传智1》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Dn01_类的构造和析构#include,,iostreamHusingnamespacestd;classTest{public:Test(){a=10;p=(char*)malloc(100);strcpy(p,Maaabbb");cout«"我是构造函数"«endl;}voidprint(){cout«a«p«endl;}~Test(){cout«"我是析构函数"«endl;}protected:private:inta;char*p;};〃给对象搭建舞台,研究对象的生命周期voidobjplay(){Testtl;〃先定义调用tl
2、的构造函数,先析构t2的析构函数tl.print));Testt2;t2.print();}voidmain11(){//Testtl,t2;〃会执行两遍构造函数,调用无参构造函数,但不会自动调用析构函数,因为会在system那停住objplay();cout«,,hello,,«endl;system(,,pauseH);return;DnO2——构造函数的分类#inelude"iostream"usingnamespacestd;classTest2{public:〃无参构造函数Test2(){m_a=0;m_b=0;cout«"无参
3、构造函数"«endl;}〃有参构造函数Test2(inta)//this指针{m_a=a;m_b=0;cout«"有参构造函数"«endl;}Test2(inta,intb)//this指针{m_a=a;m_b=b;cout«"有参构造函数"«endl;}//copy构造函数Test2(constTest2&obj)〃作用:用一个对象來初始化另一个对象{coutvv”我也是构造函数'«endl;}public:voidprintT(){cout«"普通成员函数"«endl;}private:intm_a;intm_b;};〃有参构造函数的
4、调用分为3种voidmain21()〃无参构造函数的调用方法:直接定义对象Test2tO;//默认调用无参构造函数〃有参构造函数第1种//Test2tl();〃必须写上参数//tl.printT();errTest2tl(l,2);tl.printT();〃第2种方法Test?t2=(3,4);//调用•个参数的有参构造函数,原因:逗号表达式取最后•个值等价于//Testt2=4:〃第3种方法Test2t3=Test2(5,6);//直接调用构造函数将会产生匿名对象,匿名对象对t3进行初〃始化,(匿名对象的去留问题)tl=t3;//将t3
5、赋值给tl,叫做对彖的赋值操作,不会调用copy构造函数cout«,,hello,,«endl;system(,,pause,');return;}Dn03——显示化初始化方案:为什么需要构造函数#include"iostream"usingnamespacestd;〃当类的对象是数组时,对其显示的初始化很繁琐//因此需要用构造函数去初始化classTest3{public:voidinit(int_a,int_b){a=_a;b=_b;}protected:private:inta;intb;};voidmain31(){//l.对普通
6、的刈像初始化Test3tl;inta=10,b=20;tl.init(a,b);//2.対数组初始化,必须对数组中的每一个元素对象进行初始化,比较繁琐Test3tArray[3];tArray[0].init(l,2);tArray[l].init(l,2);tArray[2].init(l,2);〃或者Test3121;t21.init(l,2);Test3122;t22.init(3,4);Test3123;t23.init(5,6);Test3tArryl[3]={t21,t22zt23};cout«,,hello,,«endl;s
7、ystem(,lpauseH);return;}Dn04——copy构造函数的调用1234种情况#include,,iostreamHusingnamespacestd;classTest4{public:〃无参构造函数Test4(){m_a=0;m_b=0;cout«"无参构造函数"«endl;}〃有参构造函数Test4(inta)//this指针ma=a;m_b=0;cout«"有参构造函数"«endl;}Test4(inta,intb)//this指针{ma=a;m_b=b;cout«"有参构造函数"«endl;}//copy构造函
8、数Test4(constTest4&obj)〃作用:用一个对象来初始化另一个对象{cout«"我也是构造函数"«endl;m_a=obj.m_a+100;m_b=obj.m_b+100;}pu