两阶构造函数练习_1
两阶构造函数练习_1
今天开始从基础学习,所有的练习都是从 example 里的 basic 中找的例子,然后自已加以改变
所有的都是通过 s60第二版 8.0a 练习的
- 通过 appWizard 建立一个 exe 工程,这个工程能生成控制台应用程序
- 通过 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);
} - 在 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