【问题标题】: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"
      

      【讨论】:

        猜你喜欢
        • 2016-07-14
        • 2020-03-06
        • 1970-01-01
        • 2017-01-09
        • 1970-01-01
        • 2012-09-09
        • 2013-10-17
        • 1970-01-01
        • 2020-05-04
        相关资源
        最近更新 更多