2013-09-23 107 views
-6

我正在使用操作系統。但是,我不得不爲開發人員創建「字符串」類型。 我試過typedefs和枚舉,但他們都不符合我的需要。我想讓類型字符串像Windows的VB.Net一樣工作。 像這樣:C++使用類定義新類型

string a 
a = "Hello, " 
a.CombineString ("World") 
int a = a.NumberOfChars() 

,所以我想出了這個(在C++)

class string { 
    char * value = NULL; //My Operating System's Kernel's Printf Function Uses Char Pointers 
    bool CompareString (char *); 
    int NumberOfChars() {return (!value);} 
    void CombineString (char *); 
} 

bool string::CompareString(char * string_to_compare_with) { 
    int return_prototype = 0; 
    return_prototype = strcmp(string::value, string_to_compare_with); //The strcmp() function returns 0 if the char*s are the same and 1 if different. 
    if(return_prototype == 0) { 
     return true; 
    } else { 
     return false; 
    } 
} 

void string::CombineString(char * string_to_add) { 
    value = strcpy(value, string_to_add); 
} 

int main() { 
    string a; 
    a.value = "Hello, "; 
    a.CombineString("World!!"); 
    Printf(a); 
} 

這將打印字符串 「你好,世界!」在我的操作系統的控制檯屏幕上。 我想只是去

string a = "Hello, "; 

string a; 
a.value = "Hello, "; 

我應該怎麼辦?

+13

我的意思是沒有壞處的,但如果你正在寫一個操作系統不應該字符串處理是一樣,一個沒有腦子? –

+1

爲什麼不使用'std :: string':http://www.cplusplus.com/reference/string/string/? –

+0

任何人都可以刪除這個問題嗎?我甚至不知道我是如何寫出如此糟糕的問題的。謝謝 – Arcrascent

回答

4

定義一個構造函數,它需要一個const char*作爲參數和一個複製構造函數應該這樣做。在那裏有一個拷貝構造函數也意味着你需要一個拷貝賦值操作符和一個析構函數。你還應該決定你的對象是否擁有字符串的所有權。在你的例子中 - a.value = "Hello, "; - 只是讓該成員指向該字符串文字。之後你將無法修改 - 也許會在那裏複製一份?

但是,我必須指出存在於<string>中的現有std::string實現。

+0

這是一個操作系統,而不是應用程序。僅從頭開始編寫的標準庫就是13,486行。此外,我是一名學生......(驚喜) – Arcrascent

+2

@Arcrascent:'std :: string'由C++標準定義,並且與Windows無關。 –

3

我是個簡單的研究員。我正在開發一個名爲「Windows」的操作系統。它運行在自己的文件系統NTFS文件系統上,並支持用戶模式,應用程序執行,內存管理以及其他很棒的東西。

除了有一個拷貝構造函數,你還需要賦值運算符重載:

const string& operator=(const string& arg){ 
    delete[] value; 
    value = new char[arg.NumberOfChars()+1]; 
    CombineString(const_cast<char*>(arg)); 
    return reinterpret_cast<string&>(*this); 
} 

string(const string& arg):value(NULL){ 
    value = new char[arg.NumberOfChars()+1]; 
    CombineString(arg); 
    return reinterpret_cast<string&>(*this); 
} 
+1

額外風格的+1 – sehe

+0

爲了記錄,在我剛剛編輯它之前,溫和的snark提供了這個答案,是在對這個問題的不必要介紹之後建立的。所以不要懲罰這個簡單的人。除非你想,否則就是我的客人! –