两阶构造函数练习_1

两阶构造函数练习_1

今天开始从基础学习,所有的练习都是从 example 里的 basic 中找的例子,然后自已加以改变
所有的都是通过 s60第二版 8.0a 练习的

  1. 通过 appWizard 建立一个 exe 工程,这个工程能生成控制台应用程序
  2. 通过 vc 的类向导创建一个 COnePhbase 类

    头文件定义:

    #include <e32base.h>
    #include <e32def.h>
    #include <e32cons.h>
    // 上面的头文件是通过查询 sdk 帮助找到的
    // e32base.h  是 CBase 类
    // e32def.h   是 TInt  定义
    // e32cons.h  是控制台类

    class COnePhbase : public CBase 
    {
    public:
     TInt iInt1;
     TInt iInt2;
     static COnePhbase* NewL();
     static COnePhbase* NewLC();
     void Print(CConsoleBase* con1);
    public:
     COnePhbase();
     virtual ~COnePhbase();

    }; 

    类的实现:

    // OnePhbase.cpp: implementation of the COnePhbase class.
    //
    //////////////////////////////////////////////////////////////////////

    #include "OnePhbase.h"

    //////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////

    COnePhbase::COnePhbase()
    {
     this->iInt2=10;
     this->iInt1=20;
    }

    COnePhbase::~COnePhbase()
    {

    }

    COnePhbase* COnePhbase::NewL()
    {
     return new(ELeave)COnePhbase(); 
    }

    COnePhbase* COnePhbase::NewLC()
    {
     COnePhbase* self = COnePhbase::NewL();
     CleanupStack::PushL(self);
     return self;
    }

    // 注意这里, 本来有一个 console 的全局变量的,但是vc不知怎么回事,通过向导生成的
    //类放到了 group 目录中,试了试无法引用到 console,所以这里传入 CConsoleBase 指针
    void COnePhbase::Print(CConsoleBase* con1)
    {
     _LIT(KFormat1,"COnePhase1 iInt1=%d,iInt2=%d");
     con1->Printf(KFormat1,iInt1,iInt2);
    }


  3. 在 app Wizard 生成的类中的 mainL中写下面的代码
    LOCAL_C void MainL(const TDesC& aArgs)
        {
        //
        // add your program code here, example code below
        //
        //console->Write(_L("Hello, world!\n"));
     
       
     COnePhbase* cone = COnePhbase::NewLC();
     cone->Print(console);
     CleanupStack::Pop(cone);
     console->Printf(_L("\nCommand line args: \"%S\"\n"), &aArgs);
    // CleanStack::PopAndDestory(cone);
        }
    如果不写 CleanStack::Pop(cone) ,则程序会马上关闭的,或者改写创建的方式用 NewL 创建

一个简单的 构造函数就实现了

我又看了看其它的两阶构造函数发现 是 NewL 中去调用 NewLC ,NewLC 添加到清洁栈中,在 NewL 中弹出,不过对于这个简单的例子用上面的方法就可以了

 

 

 



安平2009@原创
qi_jianzhou@126.com

posted @ 2010-01-05 13:35  zziss  阅读(152)  评论(0编辑  收藏  举报