在c ++中将字符串附加到类变量

时间:2014-01-26 13:12:15

标签: c++ string class oop append

我刚开始使用c ++,我需要帮助。我需要在c ++中使用append()函数追加字符串,我遇到了一些问题。这是我的代码。

class Foo
{
  char* str1;
  Foo()
  {
    Foo::str1=0;
  }
  void appendFoo(Foo foo1)
  {
    foo1.str1.append("Hello");
  }
}

我知道上面的代码是错误的。如何通过类foo的对象追加字符串“Hello”。我希望对象foo1的str1值为hello,如果我再次调用此函数,则应该追加它。任何帮助将不胜感激。

2 个答案:

答案 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;
  }
};

此外,您还需要为此类正确定义复制构造函数和复制赋值运算符。