所以我有一个名为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();
}
我得到了这些结果:
123456 654321 3854321
为什么最后一个结果与第二个结果不同?我不习惯用c ++编写代码,所以我觉得它可能是某种我忽略的c ++东西?
更新: 好的,所以我现在完全迷失了。我将reverse()更改为:
HugeInt HugeInt::reverse()
{
return *this;
}
我的主要是:
int main(int argc, char *argv[])
{
HugeInt hi4("123456");
hi4.reverse().print();
cout << endl;
cout << endl;
hugeInt = hi4.reverse();
hugeInt.print();
}
并获得结果
123456 3223456ASCII表上的
32是'Space',38是&amp;这是它之前说的。我迷路了!
答案 0 :(得分:3)
HugeInt HugeInt::reverse()
中的这一行错误。
this->~HugeInt();
这意味着您第一次拨打hi4.reverse()
时,会销毁hi4
。
每次使用它都是未定义的行为。
删除该行。我无法弄清楚你希望在那里做什么,但“没有”可能是更好的事情。
答案 1 :(得分:0)
我试图解决你的问题。我不得不对这些课程内容进行一些改进,但这段代码与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]
。
祝你的代码好运。