使用 .Copy 执行复制构造函数的最佳方法
The best way to execute copy constructor using .Copy?
>我需要帮助在我的面向对象程序中执行这个复制构造函数。结果应该是将字符串 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
),以便你朝着正确的方向复制。
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 检测win32服务创建和删除的最佳方法
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 将线程中的数据存储到全局容器的最佳方法?
- 将一系列整数放入类的最佳方法是什么?
- 在派生类中使用基类的私有成员变量的最佳方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 在nodejs中使用本机代码的最佳方法是什么?
- 将 pybind11 绑定标记为已弃用的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?