2012-04-21 37 views
0

我需要帮助在面向对象的程序中执行这个拷贝构造函数。结果应该是将字符串1:Hello World复制到字符串2:This is a test使用.Copy执行复制构造函数的最佳方法是什么?

在我.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] != '\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; 


} 
+1

'void MyString :: Copy'是一个成员函数,而不是一个拷贝构造函数。一个拷贝构造函数会有一个签名'MyString :: MyString(const MyString&other)',根本没有返回类型,甚至没有'void'。 – dasblinkenlight 2012-04-21 01:21:12

+0

这里是我的教授指示:MyString对象应该有一个Copy(...)方法,可以将一个对象复制到另一个对象中....我是否弄糊涂了? – user964141 2012-04-21 01:25:55

+0

@ user964141是的,复制方法与复制构造函数不同。 – bames53 2012-04-21 01:28:52

回答

1

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),以便正确地复制数据。

+0

你是对的。这是我的整个代码: – user964141 2012-04-21 01:33:55

+0

@ user964141你可以编辑你的问题来添加你的代码。 – bames53 2012-04-21 01:35:47

+0

太棒了!我已经添加了它 – user964141 2012-04-21 01:47:29

相关问题