动态对象:动态对象是指编程者随时动态建立并可随时消失的对象。
对象指针=new 类名(初值标);
对象指针的类型与类名一致,动态对象储存在new语句从堆申请的空间中,建立动态对象时要调用构造函数,蛋初值标缺省的时候调用默认的构造函数,exp:
Clock *Cp;
Cp=new Clock;
Cp->ShowTime();
Cp=new Clock(8,0,0);
Cp->ShowTime();
在堆中建立的动态对象不能自动消失,需要使用delete语句删除对象,格式为:
delete 对象指针;
在删除动态对象时,释放堆中的内存空间,在对象消失时,调用析构函数。例如:
delete Cp;
动态对象的一个重要的使用方面是用动态对象组成动态对象数组,建立一个一维动态对象数组的格式为:
对象指针=new 类名[数组大小];
删除一个动态对象数组的格式为:
delete[] 对象指针;
一下是对比:
Score ClassScore[3];
Score ClassScore[3]={Score(222,"tom",80,90),Score(125,"johe",80,90),Score(221,"wilson",56,67)};
//用动态数组实现:
Score *ClassScore;
ClassScore new Score[3];
ClassScore[0].SetScore(0000,"fasd",80,90);
ClassScore[1].SetScore(1222,"fafasd",67,56);
this 指针 :
一个类的成员函数中,有时希望引用调用它的对象,对此,c++采用隐含的this 指针来实现,this指针是一个系统预定的特殊指针,指向当前对象,表示当前对象的地址;
exp:
void Clock::SetTime(int h, int m, int s)
{
H=h,M=m,S=s;
this->H=h,this->M=m,this->S=s;
(*this).H=h,(*this).M=m,(*this).S=s;
} 这三句是等效的
组合对象:
一个含有其他类的类称为组合类,组合类的对象称为组合对象
组合类的定义:先定义成员类,在定义组合类
exp:
时分秒值,H, M, S,是Clock类私有成员,在Clock类外无法存取,而在TrainTrip类中需要他们的值,因此在Clock类中提供了一个公有的存取HMS值的接口函数GetH(),GetM(),GetS()供TrainTrip类读取H,M,S、旅行时间的结果是一个时间,因此函数TripTime()返回值设置成Clock类型
TrainTrip是组合类,为了给各个成员提供初值,建立了两个Clock对象,C1,C2,并设计了一个构造函数TrainTrip,将C1C2的值赋给组合类的成员对象