寒星轩

There are innumerable stars in the sky, the smallest is me!

用户操作
[即时聊天] [发私信] [加为好友]
李星ID:starlee
207018次访问,排名341好友62人,关注者106
欢迎大家访问我的Blog。
主要是C++,设计模式,面向对象设计方面的技术文章。
starlee的文章
原创 98 篇
翻译 0 篇
转载 45 篇
评论 331 篇
李星的公告
郑重声明

        本BLOG所发表的 原创文章,作者保留一切权利。必须经过作者本人同意后方可转载,并注名作者(StarLee)和出处(CSDN Blog)。
作者Email:
coolstarlee(at)sohu.com
最近评论
陈诚:好象不一样,我这个共两个类,实现类和接口类
深夜才走在路上:实际上使用CLR封送C++类让人很受伤,在mc中有很多C++的特性不能使用,甚至STL都不可用
hfg :错了错了,当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。

不管基类的析构函数是不是virtual ,派生类的析构函数还是会被调用的,区别只是在于基类的析构函数有没有被调用
Forrest Yu:Star Lee:

如果有两个以上的类需要包装,那又应该怎样做呢?
Forrest Yu:CLR 还是很强大的,
一些老的MFC项目可以先手动添加
#include <afx.h>,
其他的可能要加
#include <windows.h>,
然后再用这种方法.
文章分类
收藏
相册
友情链接
houdy的专栏
lijgame的专栏
lyrebing的专栏
禾青谷
存档
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 巧用构造函数与析构函数对数据进行设置和恢复收藏

新一篇: 发文纪念文章入选CSDN Blog精华 | 旧一篇: VISITOR模式--《敏捷软件开发》读书笔记(三)

    在开发的时候会遇到这种情况,就是在执行某些功能的时候要对一些环境变量或配置信息进行修改,功能执行完毕之后再把这些变量或配置信息设置恢复回去。举个例子:有些游戏只能在分辨率为800*600的环境下运行,如果要在分辨率1024*768的电脑上玩,就要在运行游戏的时候把分辨率改为800*600,退出游戏的时候再把分辨率改回1024*768。
    其实处理这样的情况也不是很难,我们可以写一个设置环境变量或配置信息的函数和恢复环境变量或配置信息的函数,在调用某项功能函数之前调用设置函数,之后调用恢复函数。可能会有如下的伪码片断:

......

Set();

DoSomething();

Resume();

......

    如果有很多地方都有类似上面的伪码,那么就得要求程序员牢记在调用功能函数之前和之后分别调用设置和恢复环境变量或配置信息的函数。那有没有更好的办法来解决这种问题呢?
    答案是,有!
    我们知道构造函数的主要作用是完成对类对象的初始化工作,而析构函数的作用与构造函数相反,在对象的生命期结束的时候,由系统自动调用。那么我们就可以把设置环境变量或配置信息的功能在构造函数里面实现,而在析构函数中实现对环境变量或配置信息的恢复。那样我们只要在调用功能函数之前声明一个局部变量,构造函数会对环境变量或配置信息进行设置,而在作用域结束的时候,系统会自动调用析构函数来恢复环境变量或配置信息。下面以一个简单的例子来说明:

class ClxBeginEnd
{
public:
    ClxBeginEnd();
    
~ClxBeginEnd();
};

// 这里以输出一句话来代替对环境变量的设置和恢复

ClxBeginEnd::ClxBeginEnd()
{
    cout 
<< "Output from constructor of clss ClxBeginEnd!" << endl; 
}

ClxBeginEnd::
~ClxBeginEnd()
{
    cout 
<< "Output from destructor of clss ClxBeginEnd!" << endl; 
}

void lxTest()
{
    
// 声明一个局部变量
    
// 构造函数会实现对环境变量或配置信息的设置
    
// 在作用域结束的时候,析构函数会恢复环境变量或配置信息
    ClxBeginEnd lx;
 
    
// 这里以输出一句话来代替实际的功能实现
    cout << "Do something in function lxTest!" << endl;
}

    输出结果很明显:

Output from constructor of clss ClxBeginEnd!
Do something in function lxTest!
Output from destructor of clss ClxBeginEnd!

    这样,就可以用一行声明变量的代码实现对环境变量或配置信息的设置和恢复。省去了在实现功能之前和之后分别调用两个函数的麻烦。为了帮助记忆,可以给这个类起一个更好记、更能表明含义的名字。下面就是一个例子:

typedef struct ConfigSetResume_
{
    ConfigSetResume_();
    
~ConfigSetResume_();
}ConfigSetResume;

    之所以用结构体,是因为这样写起来比较简单。我们知道,在C++中,类和结构体本质上是一样的。它们的区别就在于,类的成员默认是私有的,而结构体的成员默认是公有的。

发表于 @ 2006年10月10日 09:17:00|评论(loading...)|编辑

新一篇: 发文纪念文章入选CSDN Blog精华 | 旧一篇: VISITOR模式--《敏捷软件开发》读书笔记(三)

评论

#ymmol.... 发表于2006-10-12 21:28:00  IP: 59.61.148.*
不错...
发表评论  


登录
Csdn Blog version 3.1a
Copyright © 李星