C++ 使用.copy执行复制构造函数的最佳方法是什么?
我需要帮助在我的面向对象程序中执行这个复制构造函数。结果应该是将字符串1: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
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您可以编辑上面的问题以添加代码。