如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
类和动态内存分配12、1动态内存和类以下就是其实现(stringbad、cpp)静态类成员得初始化intStringBad::num_strings=0;///注意:静态类成员位于静态存储区,并不就是类对象得组成部分;在类声明中声明,不可初始化(静态const整型或枚举除外除外);在类方法实现文件中初始化。使用类型名和定义域限制操作符,不用关键字static。然后就是构造函数StringBad::StringBad(constchar*s){len=std::strlen(s);//setsizestr=newchar[len+1];//allotstoragestd::strcpy(str,s);//initializepointernum_strings++;//setobjectcountcout<<num_strings<<":\""<<str<<"\"objectcreated\n";//ForYourInformation}注意:字符串并没有保存在对象中,而就是在单独得堆内存中。对象中存储字符串得地址。析构函数StringBad::~StringBad()//necessarydestructor{cout<<"\""<<str<<"\"objectdeleted,";//FYI--num_strings;//requiredcout<<num_strings<<"left\n";//FYIdelete[]str;//required}此处析构函数就是必须得。在构造函数中用new分配内存,必须在析构函数中用delete释放内存文件vegnews、cpp就是使用上述类得主程序。其中定义了两个函数:一个传引用作参数,一个传值作参数voidcallme1(StringBad&rsb){cout<<"Stringpassedbyreference:\n";cout<<"\""<<rsb<<"\"\n";}voidcallme2(StringBadsb){cout<<"Stringpassedbyvalue:\n";cout<<"\""<<sb<<"\"\n";}1:"CeleryStalksatMidnight"objectcreated2:"LettucePrey"objectcreated3:"SpinachLeavesBowlforDollars"objectcreatedheadline1:CeleryStalksatMidnightheadline2:LettucePreysports:SpinachLeavesBowlforDollarsStringpassedbyreference:"CeleryStalksatMidnight"headline1:CeleryStalksatMidnightStringpassedbyvalue:"LettucePrey""LettucePrey"objectdeleted,2leftheadline2:葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺Initializeoneobjecttoanother:sailor:SpinachLeavesBowlforDollarsAssignoneobjecttoanother:3:"C++"defaultobjectcreatedknot:CeleryStalksatMidnightEndofmain()"CeleryStalksatMidnight"objectdeleted,2left"SpinachLeavesBowlforDollars"objectdeleted,1left"葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺?objectdeleted,0left未处理得异常:System、NullReferenceException:未将对象引用设置到对象得实例。atdelete[](Void*)atStringBad、__dtor(StringBad*)ind:\temp\test2\strngbad、cpp:line37atmain()ind:\temp\test2\vegnews、cpp:line39"C++"objectdeleted,-1left"葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺F"objectdeleted,-2left未处理得异常:System、NullReferenceException:未将对象引用设置到对象得实例。atdelete[](Void*)atStringBad、__dtor(StringBad*)ind:\temp\test2\strngbad、cpp:line37at__Cx