寫在前面的話:
過載是c++的重要內容,在自定義乙個類的時候,需要對類中的方法進行過載,才能方便的實現相應的功能,比如一些運算子,構造,析構函式,一些功能函式等等,而c++語言自帶的這些東西只使用於基本資料型別。另外,在自定義類中有指標的屬性,注意一下深拷貝和淺拷貝的問題。
下面是自己的實現過程,已測試,可用。
注意:1、記憶體洩露問題
2、*a++的含義(想想後置++的過載)
不使用庫函式,自定義自己的string類,其中只有乙個指標屬性(注意過載operator=(),防止淺拷貝問題)
首先,實現mystrlen和mystrcpy這兩個常用的函式。
然後,依次實現:
無參建構函式mystring():
有參建構函式mystring(const char* str):
拷貝建構函式mystring(const mystring& copyobj):
析構函式~mystring(void):
int mystrlen(const char* str):
char* mystrcpy(char* des, const char* src):
operator=()(const mystring& obj):
const char* tolow():
int mycomparecaseinsensitive(const char* str):
1.輔助函式
int mystring::mystrlen(constchar*str)
char* mystring::mystrcpy(char* des, const
char*src)
2.無參建構函式,有參建構函式,拷貝建構函式,目標物件尚未存在,直接申請空間,賦值即可。
mystring::mystring()mystring::mystring(
const
char*str )
else
if (null !=str)
}mystring::mystring(
const mystring& copyobj) //
const(唯讀) 引用(若用元素會死迴圈)
mystring::~mystring(void
)}
3. operator=(const mystring& obj)
mystring& mystring::operator =(const mystring&obj)mydata = new
char[mystrlen(obj.mydata) + 1
];
if (null !=mydata)
mystrcpy(mydata, obj.mydata);
return *this
;}
constchar*str)
5.轉換大小寫
constchar*mystring::tolow()
return
mydata;
}
6. 比較函式,不區分大小寫
int mystring::mycomparecaseinsensitive(constchar*str)
ret = *temdata - *src;
if (0 == ret || 32 == ret || -32 == ret || ('
\0' == *src && '
\0' == *temdata))
ret = 0
;
if ((ret > 0 && ret != 32) || ('
\0' == *src && '
\0' != *temdata))
if ((ret < 0 && ret != -32) || ('
\0' == *temdata && '
\0' != *src))
return
ret;
}
14 MyString 類的操作符過載
class string const char c str1 intlength 過載 操作符 ostream operator ostream output,string s istream operator istream input,string s 建構函式 string string in...
操作符過載
ifndef vertex h define vertex h class vertex vertex float px float py float pz vertex operator const vertex p vertex operator const vertex p void oper...
操作符過載
1.操作符是靜態方法,返回值表示操作結果,引數是運算元。2.操作符過載需要在過載的操作符前加上operator關鍵字。3.最好少用操作符過載,只有在意義明晰而且與內建類的操作一致時才適合使用,以免造成混亂。以建立的分數類 fraction 中的 為例,該分數類中有兩個int型的私有屬性 分子 num...