c++ - c++中没有参数的数组

标签 c++

虽然我对 java 有点经验,但我是 c++ 的新手,我的问题是下一个问题:

我正在做一个数独项目,我正在创建盒子和棋盘的抽象数据类型。在第一个棋盘中,我正在创建一个双向框数组,但当我想将其创建为公共(public)数据时,我可以在整个类中使用它,而不仅仅是在棋盘构造函数中。

我在电路板构造函数中创建它,因为如果我不在那里创建它,我就无法知道每个维度的值,如果我创建变量 Box box[int][int ] 我可以在类里面使用它的地方,我无法知道尺寸。用一些代码会更好理解。

此代码允许我创建具有我想要的维度的 Box 数组,因为它在板构造函数中,而不是在创建时它具有作为参数的框数,但它不允许我使用“casilla”类的其他部分或其他类中的变量:

class tablero{

    int filas;
    int columnas;

public:


    tablero (int filas, int columnas){

    this->filas = filas;

    this->columnas =columnas;
    Casilla casilla[filas][columnas];


    }
    Casilla getCasilla(int n, int m){
        return casilla[n][m];  <- Here shows an error because casilla cannot be resolved.

    }

这段代码让我可以使用 casilla 变量,但我必须在知道它们之前将尺寸参数给它:

class tablero{

    int filas;
    int columnas;

public:
    Casilla casilla[0][0];

    tablero (int filas, int columnas){

    this->filas = filas;

    this->columnas =columnas;



    }
    Casilla getCasilla(int n, int m){
        return casilla[n][m];

    }

没有错误,但是在我知道它们之前必须给出 casilla 数组的尺寸,因此,它们可能是错误的(因为板可能有不同的尺寸。

这是我第一次用 C++ 编程,我对这个问题真的很沮丧,谁能帮我找到一种方法让它双向工作? (我已经尝试将两个维度留空,然后在构造函数中放入 casilla[][] = Casilla cas[filas] [columnas] 但它给了我一个错误..)

感谢大家的帮助。另外,如果你觉得标题不够清楚,你可以提出一个,我会改的。

Casilla 代码是这样的:

类卡西拉{

int fila;

int columna;

int numero;

   public:

      // constructor

      Casilla(int fila, int columna,int numero)
      {
          this->fila = fila;

          this->columna = columna;

          this->numero = numero;


      }

};

感谢大家的回答,我已经从 3 个不同的人那里找到了我需要的答案。我不能给你们所有人投票,因为我还没有 15 个声望,但是当我有了它时,我会给你们所有人投票。谢谢大家的回答,真的。我只需要知道我对选中答案的评论,它就会全部回答。

最佳答案

一个数组的解决方案

//----------------------------------------------------------------------------
#include <iostream>
#include <iomanip>
//----------------------------------------------------------------------------
class Casilla
{
    int fila;
    int columna;
    int numero;

   public:

      // default constructor
      Casilla()
      {
          this->fila = -1;
          this->columna = -1;
          this->numero = 0;
      }

      int GetNumero() {return numero;}  
      void SetCasilla (int _fila, int _columna) //set a cell position
      {
          fila = _fila;
          columna = _columna;
      }
      void SetCasilla (int _numero)             //set a cell value
      {
          numero = _numero;
      }
      void SetCasilla (int _fila, int _columna, int _numero) //set a cell position and value
      {
          fila = _fila;
          columna = _columna;
          numero = _numero;
      }

};

class Tablero
{
    int filas;
    int columnas;
    Casilla **casilla;

public:

    Tablero (int filas, int columnas)
    {
        this->filas = filas;
        this->columnas =columnas;
        casilla = new Casilla* [filas];
        for (int i = 0; i<filas; i++)
          casilla[i] = new Casilla [columnas];

        for (int i = 0; i<filas; i++)
            for (int j = 0; j<columnas; j++)
                casilla[i][j].SetCasilla(i,j);  //set the right position for each cell
                                                //the values = 0 by default
    }

    //destructor
    ~Tablero()
    {
        for (int i = 0; i<filas; i++)
            delete [] casilla[i];
        delete [] casilla;
    }

    //set a cell value in the table 
    void ChangeCasillaValue (int _fila, int _columna, int _numero)
    {
        casilla[_fila][_columna].SetCasilla (_numero);
    }


    Casilla getCasilla(int n, int m)
    {
        return casilla[n][m]; 
    }

    void PrintTablero ()
    {
         for (int i = 0; i<filas; i++)
        {     
            for (int j = 0; j<columnas; j++)
                  std::cout << std::setw(5)<<casilla[i][j].GetNumero();
            std::cout << "\n";
         }
         std::cout << "\n";
    }
};


//----------------------------------------------------------------------------
int main()
{   
    int N = 5, M = 6;
    Tablero table(N, M);
    table.PrintTablero();

    table.ChangeCasillaValue(1,1,-5); //change value in cell(1,1)
    table.PrintTablero();

    std::cin.get();
    return 0;
}
//-----------------------------------------------------------------------------

你必须添加一堆你自己的 setter 和 getter。 但是,作为草稿,它是有效的。

关于c++ - c++中没有参数的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27975061/

相关文章:

c++ - 在C++中将特定类型的所有变量初始化为特定的默认值

c++ - C++中不带括号的方法

尝试从 Web 显示 JSON 文件时,C++ Rest 给我一个错误

c++ - 从winapi c项目中的专用dll加载图像资源

c++ - QSqlDatabase/QSqlQuery 终止正在运行的查询?

C++ 虚拟方法,不需要 "this"指针 - 优化

c++ - std::to_string - 多个重载函数的实例与参数列表匹配

c++ - gcc 预编译 header 的奇怪行为

c++ - 等待 DBus 服务在 Qt 中可用

C++——静态变量