我刚开始使用c ++,我需要帮助。我需要在c ++中使用append()函数追加字符串,我遇到了一些问题。这是我的代码。
class Foo
{
char* str1;
Foo()
{
Foo::str1=0;
}
void appendFoo(Foo foo1)
{
foo1.str1.append("Hello");
}
}
我知道上面的代码是错误的。如何通过类foo的对象追加字符串“Hello”。我希望对象foo1的str1值为hello,如果我再次调用此函数,则应该追加它。任何帮助将不胜感激。
答案 0 :(得分:3)
您应该将Foo::str1
声明为std::string
。此外,Foo::appendFoo()
的参数应为Foo&
类型,因此函数中的foo1
不会是临时副本。
#include <string>
class Foo
{
std::string str1;
Foo()
{
str1 = "";
}
void appendFoo(Foo &foo1)
{
foo1.str1.append("Hello");
}
}
但是,更好的设计可能会使Foo::appendFoo()
附加到对象本身的字符串上。也就是说,
void appendFoo()
{
str1.append("Hello");
}
// Calling example
Foo bar;
bar.appendFoo();
// Now bar.str1 == "Hello"
答案 1 :(得分:0)
解决方案取决于数据成员str1的类型。如果它的类型是std :: string则没有问题
class Foo
{
private:
std::string str1;
public:
Foo() = default;
void appendFoo()
{
str1.append( "Hello" );
}
};
如果数据成员str1的原始代码中的类型为char *,则解决方案更复杂。
class Foo
{
private:
char *str1;
public:
Foo() : str1( nullptr ) {}
~Foo() { delete []str1; }
void appendFoo()
{
const char hello[] = "Hello";
char *tmp = new char[ std::strlen( str1 ) + sizeof( hello ) ];
std::strcpy( tmp, str1 );
std::strcat( tmp, hello );
delete []str1;
str1 = tmp;
}
};
此外,您还需要为此类正确定义复制构造函数和复制赋值运算符。