为什么这个方法给出两个不同的结果?
Why is this method giving two different results?
所以我有一个叫做HugeInt
的类,它存储一个动态整数数组,每个位置对应一个小数点(arr[0] = 2^0, arr[1] = 2^1…)。我还有reverse
这个方法,它把数字反过来。但主要给出了两种不同的结果,有人能帮忙吗?DynArray
是我创建的动态数组类。它只包含一个int型数组,它会根据是否向数组中添加元素而调整大小。(不能使用向量)
HugeInt HugeInt::reverse(){
HugeInt hi;
for (int i = 0; i < this->size; i++){
hi.dyn.add(this->dyn[this->size - 1 - i]);
}
return hi;
}
我的打印功能:
void HugeInt::print(){
dyn.print();
}
void DynArray::print(){
for (int i = 0; i < nextIndex; i++){
std::cout << arr[i];
}
}
我的操作符= :
HugeInt& HugeInt::operator=(const HugeInt &b1)
{
this->dyn = b1.dyn;
this->size = b1.size;
return *this;
}
当我运行这个:
int main(int argc, char *argv[])
{
HugeInt hi4("123456");
hi4.print();
cout << endl;
cout << endl;
hi4.reverse().print();
cout << endl;
cout << endl;
hugeInt = hi4.reverse();
hugeInt.print();
}
我得到这些结果:
<>之前1234566543213854321之前为什么最后一个结果和第二个结果不同?我不习惯用c++编程,所以我觉得我可能忽略了一些c++的东西?
更新:好吧,我现在完全迷路了。我把反向()改成:
HugeInt HugeInt::reverse()
{
return *this;
}
和my main as:
int main(int argc, char *argv[])
{
HugeInt hi4("123456");
hi4.reverse().print();
cout << endl;
cout << endl;
hugeInt = hi4.reverse();
hugeInt.print();
}
并得到结果
<>之前1234563223456之前32在ASCII表中是'Space', 38是&和之前说的一样。我迷路了!
HugeInt HugeInt::reverse()
中的这一行
this->~HugeInt();
这意味着你第一次调用hi4.reverse()
,你破坏了hi4
。
每次在后面使用它都是未定义的行为。
删除该行。我不知道你希望在那里做什么,但是"什么都不做"可能是更好的事情。
我试图实现您的问题。我不得不对这些类的内部进行一些即兴创作,但这段代码与MS VS 2010
一起完美地工作。
我的程序:
//file: header.h
//author: kupto
#pragma once
#include <iostream>
#include <stdio.h>
#include <vector>
class DynArray
{
std::vector<char> arr;
public:
void print();
void add(char c) {arr.push_back(c);};
char get(int pos) {return (arr[pos]);};
int size() {return arr.size();};
};
void DynArray::print()
{
for (int i = 0; i < this->size(); i++)
std::cout << arr[i];
std::cout << std::endl;
}
class HugeInt
{
DynArray dyn;
public:
void print() {dyn.print();}
int size() {return (dyn.size());}
HugeInt HugeInt::reverse();
HugeInt(char* str);
HugeInt() {};
};
HugeInt::HugeInt(char* str)
{
char c;
int i = 0;
c = str[i];
while (c)
{
dyn.add(c);
c = str[++i];
}
}
HugeInt HugeInt::reverse()
{
HugeInt hi;
for (int i = 0; i < this->size(); i++){
hi.dyn.add(this->dyn.get(this->size() - 1 - i));
}
return hi;
}
和源文件:
//file: source.cpp
//author: Kupto
#include "header.h"
using namespace std;
int main()
{
HugeInt hi4("123456");
hi4.print();
hi4.reverse().print();
HugeInt hugeInt = hi4.reverse();
hugeInt.print();
hi4 = hugeInt;
hi4.print();
hi4 = hi4.reverse();
hi4.print();
return 0x00;
}
输出如预期:
123456
654321
654321
654321
123456
注意,我使用DynArray::get(int)
方法而不是你的operator[int]
。祝你的代码顺利。
相关文章:
- 如何返回一个类的两个对象相加的结果
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 这两个代码片段相似,但显示的结果不同
- oStream 不打印添加两个 valarray 的结果(使用运算符重载)
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 我有两棵二叉树.我想在不更改输入树的情况下深度复制两个二叉树的结果
- 为什么同一个逻辑方程在python和c++中返回两个不同的结果
- 为什么这两个相似的代码计算行列式的结果不同?
- 如何通过键和值以及在C 中的结果映射中比较两个地图?我们有任何STL API吗?
- 如何乘以两个值并原子存储结果
- *char数组到字符串(两次运行代码和两个不同的结果)
- 运算符的两个不同结果 - 在 c++11 中
- 在发布版本中划分两个双精度的结果错误
- 两个结果的std :: chrono :: high_resolution_clock :: now()给出了〜270n
- C++:两个单独的函数在嵌套时返回不同的结果?
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- 随机洗牌似乎会产生相同的结果,但仅在前两个实例中产生相同的结果.我如何避免这种情况
- 运算符*=来自两个实例(矩阵),结果不好
- 在 GCC 4.6 和 4.7 上模板模板扣除的两个不同结果
- 在将两个结果行写入文件之前比较用fprintf生成的结果行