使用 .Copy 执行复制构造函数的最佳方法

The best way to execute copy constructor using .Copy?

本文关键字:最佳 方法 构造函数 复制 Copy 执行 使用      更新时间:2023-10-16

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

在我的.h文件中

void Copy(MyString& one);

在我的.cpp文件中

void MyString::Copy(MyString& one)
{
   one = String;
}

在我的main.cpp文件中

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] != '') {
                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] != '') {
      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] != '')
             {
                     counter ++;
             }
                return (counter);
}
void MyString:: Set(int index, char b)
{
         if(String[index] == '')
          {
                   exit(0);
          }
         else
        {
                   String[index] = b;
          }

}
void MyString::Copy(MyString& one)
{
        one = String;

}
char MyString:: Get(int i)
{
             if( String[i] == '')
             {
                     exit(1);
             }
            else
            {
                    return String[i];
            }
}

void MyString::Print()
{
        for(int i=0; i < Size; i++)
            cout << String[i];
             cout << endl;

}

void Copy(MyString& one);不是复制构造函数,但我想你所需要的只是一个执行复制的函数。

实现:

void MyString::Copy(MyString& one) {
   one = String;
}

这是采取String,不管那是什么,大概是你的类内部存储,并分配给它你传入的字符串......

这意味着String2.Copy(String1)就像在做String1 = String2.String。所需的输出表明您要将 String1 复制到 String2 中,但您走错了方向。

此外,此作业导致部分副本("是测试")的事实意味着您正在执行该作业的方式也被破坏了。你没有展示它的实现,所以我不能告诉你它是如何被打破的。


代码存在许多问题。您可能应该与其他学生或助教一起复习一下。但是对于您的输出显示的特定问题,您应该查看三件事。首先谷歌"三法则"。其次考虑当左侧是MyString对象而右侧是 char* 时"="的含义。第三,一旦你弄清楚了数据的确切复制方式,就反转分配的方向(例如,*this = out.String),以便你朝着正确的方向复制。