14.3分配堆对象 堆对象的作用域是整个程序生命期除非程序运行完毕,否则堆对象作用域不会到期。堆对象析构是在释放堆对象语句delete执行之时。对象在执行“delete pS;”语句时,C++自动调用其析构函数
• 堆对象的作用域是整个程序生命期。 • 除非程序运行完毕,否则堆对象作用域不会 到期。 • 堆对象析构是在释放堆对象语句delete执行之 时。 • 对象在执行“delete pS ; ”语句时,C++自动 调用其析构函数
14.3分配堆对象·构造函数可以有参数,所以跟在new后面的类类型也可以跟参数例如:new后面的类型必须跟参数classTdatepublic :Tdate (int m, int d, int y);protected:int month ;int day ;int year ;;7
• 构造函数可以有参数,所以跟在new后面的 类类型也可以跟参数。 例如:new后面的类型必须跟参数 class Tdate { public: Tdate ( int m , int d , int y ) ; protected: int month ; int day ; int year ; } ;
分配堆对象14.3Tdate: : Tdate(int m, int d,int y)if (m>0&&m<13)month = m ;if (d>0&&d<32)new调用构造函数day = d ;Tdate(int,int,int)if (y>0 &&y<3000)year =y;void fn()11Tdate * pDpD = new Tdate(1, 1, 1998 ) ;//.....delete(pD) ;1
Tdate : : Tdate ( int m , int d , int y ) { if ( m > 0 && m < 13 ) month = m ; if ( d > 0 && d < 32 ) day = d ; if ( y > 0 && y < 3000 ) year = y ; } void fn ( ) { Tdate * pD ; pD = new Tdate( 1, 1, 1998 ) ; //. delete(pD) ; } new调用构造函数 Tdate(int,int,int)
分配堆对象14.3若改成“pD=new Tdate;则由于Tdate类没有默认构造函数Tdate(),而使该语句报错,从堆中还可以分配对象数组
• 若改成“pD = new Tdate ; ” • 则由于Tdate类没有默认构造函数Tdate( ),而 使该语句报错。 • 从堆中还可以分配对象数组
14.3分配堆对象例如:分配了参数给定的对象个数,并在结束时返还classStudentpublic :Student (char * pName = "no name")strcpy(name, pName);name[sizeof(name)-1] = "0" ;protected :char name[40] ;
例如:分配了参数给定的对象个数,并在结束 时返还 class Student { public: Student ( char * pName = "no name" ) { strcpy( name , pName ) ; name[sizeof(name)-1] = "\0" ; } protected: char name[40] ; } ;