大隐于市

用艺术的眼光看待编程!

孙东风ID:dongfengsun
131330次访问,排名611好友5人,关注者31
03年从西安交通大学毕业后一直从事移动平台的开发工作。崇尚一切自由的东西,热爱交流。目前专注于手机二维码技术研究并负责技术管理工作,希望能和同行认识、交流、共享。
dongfengsun的文章
原创 73 篇
翻译 2 篇
转载 32 篇
评论 151 篇
孙东风的公告
原创文章转载请注明出处
QQ :372590353
MSN:sundongfeng1227@hotmail.com
  我的EMAIL



最近评论
j7fs:我也正在学习这方面的知识,希望能得到你的指点,
我的邮箱是:j7fs_cn@163.com,望能得到一份源码以便学习之用,谢谢:)
gjprgj:能否列几本书看看?新手,多指教:)
gjprgj:能不能给列几本书看看啊?新手,多指教。
gjprgj:能不能给列几本书看看啊?新手,多指教。
fig_o:就下载了某大师的VC++视频资料
请问在哪里下载。地址给一个
文章分类
收藏
    相册
    存档
    订阅我的博客
    XML聚合  FeedSky

    转载 与全局变量构造析构顺序有关的一道面试题(C++) 收藏

    新一篇: 关于Symbian的"程序已经关闭"错误 | 旧一篇: C++箴言:避免析构函数调用虚函数

    原文地址:http://blog.csdn.net/wstarx/archive/2006/06/26/836373.aspx

    题目是
    #include  <iostream>
    int  main()
    {
        std::cout<<"This is in main"<<std::endl;

        return 0;
    }

    如何在不修改上述代码中mian()里面的部分,使输出的内容为:
    Start
    This is in main
    End

    解答:
    此题我一开始想到的方法是重写std里得cout类,修改其中<<运算符的实现,经过面试我的高手提示,说是重载这个运算符比较危险,而且需要重写全部的函数不太现实。当时比较沮丧,没有想到其他的办法。

    回来后,复习基础知识中发现有关于全局变量介绍的这么一句话:
    全局对象在调用 main之前初始化, 在退出main之后析构
    真是一语惊醒梦中人,完全可以用申明一个全局变量的方法实现上面这个题目。
    具体实现代码如下,就是在main之前加了一个gb类的定义,然后在新建一个这个类的全局变量:

    #include "stdafx.h"
    #include <iostream>

    class gb
    {
    public:
        gb::gb()
        {
            std::cout<<"start"<<std::endl;
        };

        gb::~gb()
        {
            std::cout<<"end"<<std::endl;
        };
    };

    gb a;

    int main()
    {
        std::cout<<"This is in main"<<std::endl;
       
        return 0;
    }
     

    发表于 @ 2007年01月10日 11:21:00|评论(loading...)|编辑

    新一篇: 关于Symbian的"程序已经关闭"错误 | 旧一篇: C++箴言:避免析构函数调用虚函数

    评论

    #clever101 发表于2007-09-22 13:06:08  IP: 125.33.128.*
    quote:全局对象在调用 main之前初始化, 在退出main之后析构

    在VC上建了一个控制台工程,把下面代码拷贝进去:
    #include <iostream>

    class gb
    {
    public:
    gb::gb()
    {
    std::cout<<"start"<<std::endl;
    };

    gb::~gb()
    {
    std::cout<<"end"<<std::endl;
    };
    };

    gb a;

    int main()
    {
    std::cout<<"This is in main"<<std::endl;

    return 0;
    }


    输出结果是:

    Start
    This is in main

    楼主如何解释呢?
    #clever101 发表于2007-09-22 13:18:47  IP: 125.33.128.*
    这是VC的全局类对象析构顺序的不同导致的。其实cout本身就是一个类对象。我的意思是说:全局对象在调用 main之前初始化, 在退出main之后析构。这话没错。

    #include <iostream>
    #include <stdio.h>



    class gb
    {
    public:
    gb::gb()
    {
    // std::cout<<"start"<<std::endl;
    printf("start\n");
    };

    gb::~gb()
    {
    // std::cout<<"end"<<std::endl;
    printf("end\n");
    };
    };

    gb a;

    int main()
    {
    std::cout<<"This is in main"<<std::endl;

    return 0;
    }

    可以看到"end"输出
    当然前面要加上#include<stdio.h>
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 孙东风