2011年8月23日星期二

ODbgScript源碼學習(三)

var::var(ulong rhs) //
{
vt = DW; //變量類型為雙字節
dw = rhs; //雙字節被賦予為未知長整型
flt = 0;
str = "";
size = sizeof(rhs); //大小為rhs大小
isbuf = false;
}

var::var(int rhs)
{
vt = DW; //int類型是變量var類型為vt
dw = (ulong)rhs; //dw為rhs類型轉換
flt = 0;
str = "";
size = sizeof(rhs);
isbuf = false;
}

var::var(long double rhs)
{
vt = FLT; //雙精度類型
flt = rhs; //
dw = 0;
str = "";
size = sizeof(rhs);
isbuf = false;
}


var& var::operator=(const var& rhs) //重載賦值號=,對象間賦值,返回自身指針
{
vt = rhs.vt;
dw = rhs.dw;
str = rhs.str;
flt = rhs.flt;
size = rhs.size;
isbuf = rhs.isbuf;
return *this;
}

var& var::operator=(const string& rhs) //重載賦值號=,字串類型賦值給對象,返回自身指針
{
vt = STR;
dw = 0;
flt = 0;
str = rhs; //str為字符串
string s=rhs;
if (UnquoteString(s,'#','#')) { //判斷字串是否結束
size = s.length()/2; //初始大小為字符串長度一半
int (*pf)(int) = toupper; //轉換字符串大小寫
transform(str.begin(), str.end(), str.begin(), pf); //遍歷容器str,從str.begin()開始,到str.end()結束,str.begin()寫入目標地址,執行pf轉換字符串大小寫操作
isbuf = true; //使用了緩衝區
} else {
size = rhs.length(); //如果結束,大小為字符串的一半
isbuf = false; //未曾使用緩衝區
}
return *this; //返回自己的指針
}

var& var::operator=(const ulong& rhs) //重載操作符=,ulong賦值給對象,返回自身指針
{
vt = DW;
dw = rhs;
flt = 0;
str = "";
size = sizeof(rhs);
isbuf = false;
return *this;
}

var& var::operator=(const int& rhs) //重載操作符=,int複製給對象,返回自身指針
{
vt = DW;
dw = (ulong)rhs;
flt = 0;
str = "";
size = sizeof(rhs);
isbuf = false;
return *this;
}

var& var::operator=(unsigned short& rhs) //重載操作符=,short賦值給對象,返回自身指針
{
vt = DW;
dw = rhs;
flt = 0;
str = "";
size = sizeof(rhs);
isbuf = false;
return *this;
}

var& var::operator=(unsigned char& rhs) //重載操作符,char賦值給對象,返回自身指針
{
vt = DW;
dw = rhs;
flt = 0;
str = "";
size = sizeof(rhs);
isbuf = false;
return *this;
}

var& var::operator=(const long double& rhs) //重載操作符,long double賦值給對象,返回自身指針
{
vt = FLT;
dw = 0;
flt = (long double)rhs;
str = "";
size = sizeof(rhs);
isbuf = false;
return *this;
}


没有评论:

发表评论