我正在开发一个操作系统。但是,我必须为开发人员创建类型“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, ";
我该怎么办?
答案 0 :(得分:4)
定义一个以const char*
作为参数和复制构造函数的构造函数应该这样做。拥有复制构造函数也意味着您需要一个复制赋值运算符和一个析构函数。您还应该决定您的对象是否拥有字符串的所有权。在您的示例中 - a.value = "Hello, ";
- 只是使该成员指向该字符串文字。之后你将无法修改它 - 也许在那里复制一份?
但是,我必须指出std::string
中存在的现有<string>
实施。
答案 1 :(得分: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);
}