C++ 使用.copy执行复制构造函数的最佳方法是什么?

C++ 使用.copy执行复制构造函数的最佳方法是什么?,c++,string,object,copy-constructor,C++,String,Object,Copy Constructor,我需要帮助在我的面向对象程序中执行这个复制构造函数。结果应该是将字符串1:Hello World复制到字符串2:这是一个测试 在我的.h文件中: void Copy(MyString& one); void MyString::Copy(MyString& one) { one = String; } String1.Print(); cout << endl; String2.Print(); cout << endl; Str

我需要帮助在我的面向对象程序中执行这个复制构造函数。结果应该是将字符串1:
Hello World
复制到字符串2:
这是一个测试

在我的
.h
文件中

void Copy(MyString& one);
void MyString::Copy(MyString& one)
{
   one = String;
}
String1.Print();
cout  << endl;
String2.Print();
cout  << endl;      
String2.Copy(String1);      
String1.Print();       
cout  << endl;
String2.Print();
cout  << endl;
Hello World
This is a test
is a test
This is a test
Hello World
This is a test
Hello World
Hello World
在我的
.cpp
文件中

void Copy(MyString& one);
void MyString::Copy(MyString& one)
{
   one = String;
}
String1.Print();
cout  << endl;
String2.Print();
cout  << endl;      
String2.Copy(String1);      
String1.Print();       
cout  << endl;
String2.Print();
cout  << endl;
Hello World
This is a test
is a test
This is a test
Hello World
This is a test
Hello World
Hello World
在我的
main.cpp
文件中:

void Copy(MyString& one);
void MyString::Copy(MyString& one)
{
   one = String;
}
String1.Print();
cout  << endl;
String2.Print();
cout  << endl;      
String2.Copy(String1);      
String1.Print();       
cout  << endl;
String2.Print();
cout  << endl;
Hello World
This is a test
is a test
This is a test
Hello World
This is a test
Hello World
Hello World
应该是

void Copy(MyString& one);
void MyString::Copy(MyString& one)
{
   one = String;
}
String1.Print();
cout  << endl;
String2.Print();
cout  << endl;      
String2.Copy(String1);      
String1.Print();       
cout  << endl;
String2.Print();
cout  << endl;
Hello World
This is a test
is a test
This is a test
Hello World
This is a test
Hello World
Hello World
请向我解释我做错了什么

这是我的整个.cpp文件:

MyString::MyString()

{

char temp[] = "Hello World";

        int counter(0);
        while(temp[counter] != '\0') {
                counter++;
        }
        Size = counter;
        String = new char [Size];
        for(int i=0; i < Size; i++)
                String[i] = temp[i];

}

MyString::MyString(char *message)

{

      int counter(0);

       while(message[counter] != '\0') {

      counter++;

   }

        Size = counter;

        String = new char [Size];


         for(int i=0; i < Size; i++)

           String[i] = message[i];

}

MyString::~MyString()

{

        delete [] String;

}

int MyString::Length()

{
              int counter(0);

              while(String[counter] != '\0')
             {
                     counter ++;
             }

                return (counter);
}

void MyString:: Set(int index, char b)

{

         if(String[index] == '\0')

          {
                   exit(0);
          }

         else

        {

                   String[index] = b;
          }


}

void MyString::Copy(MyString& one)

{

        one = String;


}

char MyString:: Get(int i)
{

             if( String[i] == '\0')
             {
                     exit(1);
             }
            else
            {

                    return String[i];

            }
}



void MyString::Print()

{

        for(int i=0; i < Size; i++)

            cout << String[i];

             cout << endl;


}
MyString::MyString()
{
char temp[]=“你好,世界”;
整数计数器(0);
while(临时[计数器]!='\0'){
计数器++;
}
尺寸=计数器;
字符串=新字符[大小];
对于(int i=0;ivoidcopy(MyString&one);
不是一个复制构造函数,但我想您需要的只是一个进行复制的函数

实施:

void MyString::Copy(MyString& one) {
   one = String;
}
这是将
字符串
,不管它是什么,假定您的类是内部存储,并将您传入的字符串分配给它

这意味着
String2.Copy(String1)
类似于执行
String1=String2.String
。您所需的输出表明您希望将String1复制到String2中,但方向完全错误

此外,该赋值导致部分副本(“是测试”)这一事实意味着,无论您如何执行,该赋值也会被破坏。您没有显示该赋值的实现,因此我无法告诉您它是如何被破坏的



<代码>有很多问题。你应该用另一个学生或TA来检查它。但是对于特定的问题,你的输出显示你应该看三件事。首先是谷歌“三的规则”。其次,当左边是<代码> MyStudio对象时,“=”意味着什么,右边是char *。第三,一旦你无花果。要知道数据将被复制的确切方式,请反转赋值方向(例如,
*this=out.String
),以便按照正确的方向复制。

void MyString::Copy
是一个成员函数,而不是复制构造函数。复制构造函数将具有签名
MyString::MyString(const MyString&other)
,并且没有返回类型,甚至没有
void
。这是我教授给我的说明:MyString对象应该有一个Copy(…)方法,它可以将一个对象复制到另一个对象中……我是否对这两个问题感到困惑?@user964141是的,Copy方法与Copy构造函数不同。不,说明是正确的:
Copy(…)可以称为方法(这是其他面向对象世界中所调用的方法,但在C++中称为成员函数)。。但是,
Copy
不是构造函数。您的代码有很多错误,您应该学会使用标准库容器和算法。计算C字符串的长度可以像
strlen(ptr)一样简单
,您应该更频繁地使用
const
,例如
Set
函数不修改对象。关于此函数的实现,检查您是否覆盖空终止符,但它不检查索引是否有效(即在
[0..Size]范围内)
),要么提供完整检查,要么根本不检查。
Length
重新计算
Size
的值。…@user964141您可以编辑上面的问题以添加代码。