不同存储的对象生存期不同。所谓对象的生存期是指对象从被创建开始到被释放为止的时间。
按生存期的不同对象可分为如下三种:
1、局部对象:当对象被定义时调用构造函数,该对象被创建,当程序退出定义该对象所在的函数体或程序块时,调用析构函数,释放该对象。
2、静态对象:当程序第一次执行所定义的静态对象时,该对象被创建,当程序结束时,该对象被释放。
3、全局对象:当程序开始时,调用构造函数创建该对象,当程序结束时调用析构函数释放该对象。
局部对象是被定义在一个函数体或程序块的,它的作用域小,生存期也短。
静态对象是被定义在一个文件中,它的作用域从定义时起到文件结束时为止,它的作用域比较大,它的生存期也比较大。
#include <iostream> using namespace std; int i = 1; //i为全局变量,具有静态生存期 int main() { static int a; //a为静态局部变量,具有全局寿命,局部可见 int b=-10; //b,c为局部变量,具有动态生存期 int c=0; void other(void); cout <<"-----MAIN------"<<endl; cout <<"i="<<i<<" a="<<a<<" b="<<b<<" c="<<c<<endl; c=c+8; other(); cout<<"-----MAIN-------"<<endl; cout <<"i="<<i<<" a="<<a<<" b="<<b<<" c="<<c<<endl; i=i+10; other(); return 0; } void other(void) { //a,b为静态局部变量,具有全局寿命,局部可见,只第一次进入函数是被初始化 static int a=2; static int b; int c=10; a = a+2; i =i+32; c = c+5; cout<<"-----OTHER-----"<<endl; cout <<"i="<<i<<" a="<<a<<" b="<<b<<" c="<<c<<endl; b=a; }
运行结果
具有静态、动态生存期对象的时钟程序
#include <iostream> using namespace std; class Clock { public: Clock(); void SetTime(int NewN,int NewM,int NewS); void ShowTime(); ~Clock(){} private: int Hour,Minute,Second; }; Clock::Clock() { } void Clock::SetTime(int NewN,int NewM,int NewS) { Hour = NewN; Minute = NewM; Second = NewS; } void Clock::ShowTime() { cout <<Hour<<":"<<Minute<<":"<<Second<<endl; } Clock globClock; int main(int argc, char* argv[]) { cout<<"First Time Output:"<<endl; globClock.ShowTime(); globClock.SetTime(8,10,15); Clock myClock(globClock); cout <<"Second Time Output:"<<endl; myClock.ShowTime(); return 0; }
运行结果: