【问题标题】:Append strings to class variable in c++将字符串附加到 C++ 中的类变量
【发布时间】:2014-02-17 06:49:43
【问题描述】:
我刚开始接触 c++,我需要帮助。我需要使用 c++ 中的 append() 函数附加字符串,但我遇到了一些问题。这是我的代码。
class Foo
{
char* str1;
Foo()
{
Foo::str1=0;
}
void appendFoo(Foo foo1)
{
foo1.str1.append("Hello");
}
}
我知道上面的代码是错误的。如何通过类 foo 的对象附加字符串“Hello”。我希望对象 foo1 的 str1 值为 hello,如果我再次调用此函数,则应附加它。任何帮助将不胜感激。
【问题讨论】:
标签:
c++
string
class
oop
append
【解决方案1】:
解决方案取决于数据成员 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;
}
};
您还需要为此类正确定义一个复制构造函数和复制赋值运算符。
【解决方案2】:
您应该将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"