3

我需要一些非常简单的帮助,而 C++ 使这非常困难。我创建了一个 lattice 类,目的是初始化和处理矩阵。有以下私人成员:

private unsigned dim;
private double matrix [dim][dim];

我想通过一个参数在类的构造函数中初始化变量dim,但是编译器不断返回错误。我尝试将 dim 设为 public 和 static 并在主程序中对其进行初始化,但仍然存在问题。我怎么能创建这个简单的类?

此外,我还在类中实现了一些方法来更新矩阵的值。在主程序中初始化类的一个对象,然后使用它的“更新”方法,矩阵的值是否只存储一次?

感谢您的帮助。

4

3 回答 3

2

(至少)有三种方法可以创建这样的类:

  • template

    template<size_t dim>
    class Matrix
    {
       private:
         double matrix[dim][dim];
    }
    
  • 使用内置类型,例如std::vector(例如valarray也可以)

    #include <vector>
    class Matrix
    {
       private:
         size_t dim;
         std::vector<std::vector<double> > matrix;
       public:
         Matrix(size_t dim_) : dim(dim_), matrix()
         {
           matrix.resize(dim);
           for ( size_t i = 0; i < dim; ++i )
              matrix[i].resize(dim);
         }
    }
    
  • 使用普通数组(我不建议这样做!)

    class Matrix
    {
       private:
         size_t dim;
         double** matrix;
       public:
         Matrix(size_t dim_) : dim(dim_), matrix()
         {
           matrix = new double*[dim];
           for ( size_t i = 0; i < dim; ++i )
              matrix[i] = new double[dim];
         }
         ~Matrix() // you need a destructor!
         {
           for ( size_t i = 0; i < dim; ++i )
              delete [] matrix[i];
           delete [] matrix;
         }
    }
    
于 2012-10-21T17:15:59.223 回答
1

使用模板:

template<int dim>
class Lattice{
    double matrix[dim][dim];
}

并在构造函数中初始化 dim:

Lattice<10> sampleLattice;

然后dim = 10;

您可能会使用指针或向量的向量,但我会使用模板,因为它不太容易混淆和方便。

顺便说一句,您将不得不使用private:and public:(带冒号)。

于 2012-10-21T17:14:48.177 回答
0

我猜你的“问题”是编译器抱怨使用非常量大小的数组初始化。

你应该这样做:

class MyClass {
public:
    MyClass(unsigned pdim);
private:
    MyClass();
    const unsigned dim;
    const double matrix [dim][dim];
};

MyClass::MyClass(unsigned pdim) : dim(pdim) {
    // Other things
}

您可以在类中包含 const 成员,但需要使用:语法对其进行初始化。

于 2012-10-21T17:14:46.987 回答