【问题标题】:How to create different objects in c++? [duplicate]如何在 C++ 中创建不同的对象? [复制]
【发布时间】:2020-02-18 00:34:12
【问题描述】:

在我在学校的一堂课中,我的部分作业包括创建一个构造函数,将随机值分配到二维数组中。虽然我已经能够创建数组,让构造函数将随机值分配到所述数组中,但我似乎无法创建具有不同 2D 数组的多个对象。我制作的任何对象似乎都具有先前分配给第一个对象的相同值。我在 C++ 方面相当新,所以我认为答案几乎没有飞过我的头。 TIA

#include <ctime>
#include <cstdlib>
#include <iostream>

using namespace std;

const int sizeOfArray = 3;
int myArray;//a

class Matrix
{
public:
  int myArray[sizeOfArray][sizeOfArray];//a
  Matrix ()//b
  {
    srand(time(NULL));
    for(int i = 0; i < sizeOfArray; i++){
      for(int j = 0; j < sizeOfArray; j++){
      myArray[i][j] = rand() % 10;
      }
    }
  }

  void printMyArray();

};
void Matrix::printMyArray()//c
{
  cout<<"The Matrix is as follows: \n"<<endl;
  cout<<myArray[0][0]<<"\t"<<myArray[0][1]<<"\t"<<myArray[0][2]<<"\n"<<endl;
  cout<<myArray[1][0]<<"\t"<<myArray[1][1]<<"\t"<<myArray[1][2]<<"\n"<<endl;
  cout<<myArray[2][0]<<"\t"<<myArray[2][1]<<"\t"<<myArray[2][2]<<"\n"<<endl;
}

int main()
{
  Matrix matrix;
  matrix.printMyArray();

  Matrix natrix;
  natrix.printMyArray();

  return 0;
}

我希望输出吐出两个不同的数组,但是,同一个数组重复两次,输出为:

矩阵如下:

4 0 9

6 0 4

6 3 0

矩阵如下:

4 0 9

6 0 4

6 3 0

【问题讨论】:

  • 不相关,但为什么全局范围内有int myArray;
  • 如今,C++ 程序员可以使用许多随机数生成选项,而不是rand。考虑改用std::uniform_int_distribution。如果你想要一些笑声和an explanation of why rand isn't all that good...
  • 没有理由我只是不知道如何编码哈哈。我相信几天前当我开始这部分作业时,我把它放在那里是为了测试一些东西。不过感谢您的收获!

标签: c++ constructor


【解决方案1】:

您正在为随机数生成器播种相同的值,因此重新启动相同的数字序列。

time() 只精确到秒,而且您的代码运行速度比这快得多,因此大多数时候您获得相同的种子(在极少数情况下可能会有所不同)。

为了证明这一点,请在对象创建之间添加 sleep(2) - 然后您将获得 RNG 的不同种子。

一劳永逸地解决这个问题:不要在课堂上播种 RNG,在 main() 开始时做一次

【讨论】:

  • 非常感谢,这让一切都更清楚了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 2023-03-07
  • 2021-05-04
相关资源
最近更新 更多