zoukankan      html  css  js  c++  java
  • C++对象的生存期

    不同存储的对象生存期不同。所谓对象的生存期是指对象从被创建开始到被释放为止的时间。
     按生存期的不同对象可分为如下三种:

    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;
    }

    运行结果:

  • 相关阅读:
    MFC学习笔记2添加资源
    汇编语言基础教程数据类型
    MFC学习笔记3引用资源
    asp.net MVC留言本示例
    汇编语言学习笔记按指定的字体输出文本
    C#(winform)项目中自制alert提示窗体并引用系统图标资源
    报表打印(rdlc)
    在内存中序列化,反序列化对象实体 来完成对象实体的深拷贝
    Hibernate中ORA01502错误的解 ...
    NHibernate的调试技巧和Log4Net配置
  • 原文地址:https://www.cnblogs.com/haoyuanyuan/p/3080773.html
Copyright © 2011-2022 走看看