-6

我现在正在开发一个操作系统。但是,我必须为开发人员创建类型“String”。我已经尝试过 typedef 和枚举,但它们都不符合我的需要。我想让类型字符串像 Windows 的 VB.Net 一样工作。像这样:

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);
}

这将打印字符串“Hello, World!!” 在我的操作系统的控制台屏幕上。我想去

string a = "Hello, ";

不是

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

我应该怎么办?

4

2 回答 2

4

定义一个接受const char*as 参数的构造函数和一个复制构造函数应该这样做。那里有一个复制构造函数也意味着你需要一个复制赋值运算符和一个析构函数。您还应该决定您的对象是否拥有字符串的所有权。在您的示例a.value = "Hello, ";中 - 只是使该成员指向该字符串文字。之后您将无法修改它 - 也许在那里制作副本?

但是,我必须指出std::string存在于<string>.

于 2013-09-23T20:16:28.633 回答
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);
 }
于 2013-09-23T20:54:01.330 回答