gpt4 book ai didi

C++ 重载运算符 +()

转载 作者:太空宇宙 更新时间:2023-11-04 12:03:14 25 4
gpt4 key购买 nike

我有一个名为 String 的简单类,它有一个 char* 作为私有(private)字段。

class String {
char *s;
+ some public methods
};

我想重载 + 运算符,这样 a + b 就意味着来自 a 和 b 的字符串被连接起来。

函数在这里:

String String::operator+(String a)
{
String rez;
rez.s = new char[strlen(this->s) + strlen(a.s) + 1];
assert(rez.s);
strcpy(rez.s, this->s);
strcat(rez.s, a.s);
cout<<rez.s<<endl; // HERE rez.s CONTAINS THE RIGHT STRING!
return rez;
}

在我这样调用之后:c = a + b;

我收到一个名为 Debug assertion failed 的错误。

有什么想法吗?

最佳答案

首先,阅读 Rule of Three

然后,考虑一下:

class String {
char *s; // << pointer
+ some public methods
};

“+ 一些公共(public)方法”最好有一个构造函数,将指针成员初始化为可测试的值(如 NULL),否则您将陷入未定义的行为。它最好重写复制构造函数和赋值运算符,以正确地将字符串从一个 String 对象复制到另一个对象。最后,它最好有一个析构函数,它知道如何清除指向上述所有分配内容的动态指针。

强烈建议您前后阅读那篇文章。

关于C++ 重载运算符 +(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13277776/

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