Leo*_*tov 4 c++ string operator-overloading
我正在学习cpp,在我上一次作业中,我正在重写std :: string类.所以这里是我的代码大纲:字符串类:
class String {
public:
String(const char* sInput) {
string = const_cast<char*> (sInput);
}
const String operator+(const char* str) {
//snip
print();
}
void print() {
cout<<string;
}
int search(char* str) {
}
private:
char* string;
int len;
};
Run Code Online (Sandbox Code Playgroud)
哦,我不得不说我试图将方法声明为String*operator +(const char*str)和const String&operator +(const char*str),没有任何变化.以下是我如何运行它:
int main(int argc, char* argv[]) {
String* testing = new String("Hello, "); //works
testing->print();//works
/*String* a = */testing+"World!";//Error here.
return 0;
}
Run Code Online (Sandbox Code Playgroud)
完整的错误是这样的:
foobar.cc:13:错误:类型'String*'和'const char [7]'到二进制'operator +'的操作数无效
我抬头看谷歌,在我正在学习的书中没有成功.有建议吗?(我很确定我在做一些愚蠢的事情,你必须原谅我,我原本是一名PHP程序员)任何人都可以指出我错过了什么?
您可能不希望使用指向您的String类的指针.试试这段代码:
int main(int argc, char* argv[]) {
String testing = String("Hello, "); //works
testing.print();//works
String a = testing+"World!";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在为C++类型定义新运算符时,通常会直接使用实际类型,而不是指向类型的指针.像上面(as String testing)一样分配的C++对象在堆栈上分配(一直存在"范围"或函数结束)而不是堆(直到程序结束).
如果你真的想使用指向你的类型的指针,你会修改最后一行,如下所示:
String *a = new String(*testing + "World!");
Run Code Online (Sandbox Code Playgroud)
但是,遵循此示例std::string并不是您通常希望使用此类字符串类的方式.