gpt4 book ai didi

c++ - 在 C++ 中重载自定义字符串运算符 +=

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:13 24 4
gpt4 key购买 nike

我正在努力重新创建各种 C++ 类型,以便更好地理解它们的工作原理。我目前卡在 += 运算符上,找不到我的声明有什么问题。这是我的类(class)的代码:

class String {
int size;
char * buffer;
public:
String();
String(const String &);
String(const char *);
int length(){return size;};

friend bool operator==(const String &, const String &);
friend bool operator<=(const String &, const String &);
friend bool operator<(const String &, const String &);
friend ostream & operator<<(ostream &, const String &);

char operator[](const int);
// friend String operator+=(const String &,const char * p);
friend String operator+=(const char * p);

};

除了 += 运算符定义为:

String operator+=(const char * p){
int p_size = std::char_traits<char>::length(p);
int new_size = size+p_size;
char * temp_buffer;
temp_buffer = new char(new_size);

for(int i=0; i<size; i++){
temp_buffer[i] = buffer[i];
}

for(int i=size, j=0; j<p_size;i++,j++){
temp_buffer[i] = p[j];
}

delete buffer;
buffer = new char[new_size];
size = new_size;
for(int i=0; i<size; i++){
buffer[i] = temp_buffer[i];
}
return *this;
}

我的错误是string.h:29: 错误:“字符串运算符+=(const char*)”必须有类或枚举类型的参数string.cpp:28: 错误:“字符串运算符+=(const char*)”必须有类或枚举类型的参数

感谢我在重载期间做错的任何信息。

最佳答案

operator+= 是二元运算符,因此需要两个操作数(例如 myString += "str",,其中 myString"str" 是操作数)。

但是,您有一个格式错误的 operator+=,因为它只接受一个参数。请注意,您的 operator+= 是一个独立函数(不是类方法),它返回一个 String 并接受一个 const char* 争论。

为了解决你的问题,让你的 operator+= 成为一个成员函数/方法,因为到那时,你将有一个隐式的 this 参数,它将被用作左侧操作数。

class String {
...
String& operator+=(const char * p);
};

及其定义

String& String::operator+=(const char * p) {
...
return *this;
}

请注意,您现在正在返回对 *this 的引用,并且其返回类型已更改为 String&。这些符合 Operator overloading 中的指南.

重要更新:

temp_buffer = new char(new_size);

不!您正在分配单个 char 并将其初始化为 new_size,但这不是您想要的。将其更改为括号。

temp_buffer = new char[new_size];

现在,您正确地分配了 new_sizechar 数组。请不要忘记delete[]所有你new[]的。

关于c++ - 在 C++ 中重载自定义字符串运算符 +=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21521116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com