将字符串附加到C 中的类变量

Append strings to class variable in c++

本文关键字:类变量 字符串      更新时间:2023-10-16

我只是从C 开始,我需要帮助。我需要使用C 中的Append()函数附加字符串,并且我面临一些问题。这是我的代码。

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

我知道上述代码是错误的。如何通过类Foo的对象附加字符串" Hello"。我希望对象foo1的str1值为Hello,如果我再次调用此函数,则应将其附加。任何帮助将不胜感激。

您应该将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"

解决方案取决于数据成员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;
  }
};

您还需要正确定义此类的复制构造台和复制分配运算符。