在类中定义数组的方法和字段

Posted

技术标签:

【中文标题】在类中定义数组的方法和字段【英文标题】:Defining methods and field of an Array in a class 【发布时间】:2019-11-05 13:41:00 【问题描述】:

我希望能够构建一个包含整数数组的类。我刚刚编写了一个简单的代码,但它没有打印数组的元素。 代码编译,但我没有任何结果。

#include <iostream>

using namespace std;

const int len = 5;

class TrialArray 
    protected:
        int len;
        int A[];
    public:
        TrialArray() 
            for (int i=0; i<this->len; i=i+1) 
                this->A[i] = i;
            
        
        void print() 
            for (int i=0; i<this->len; i=i+1) 
                std::cout << this->A[i] << '\t';
            
        
;

int main() 
    TrialArray A;
    A.print();

    return 0;

这是一个简单的代码。总的来说,我有方法A.print(),它应该打印值,在这种情况下是 0,1,2,3,4 但不是。而且我不明白我可能在哪里做错了。

【问题讨论】:

A 从未被初始化...len也不是 代码编译, -- int A[]; -- 这不是有效的 C++。 为什么 int A[] 在 C++ 中无效?我应该使用 int A* 吗? 它在 C99 中有效,(灵活的数组成员),往往会渗入 C++ 方言。是的,使用int* A 使您需要使用new[] 分配数组变得更加明显。而且你需要谷歌“c++ rule of three”。 我倾向于将 int A[] 视为一个数组、一个容器,而 int A* 我将其视为一个指针。这就是为什么有时我会重叠这两件事,即使它们是同一件事。感谢您的解释。 【参考方案1】:

您在构造函数中引用了this-&gt;len 变量,而不是全局静态len

另外你还没有指定数组的大小。

您需要更改代码以正确引用全局变量。更好的方法是在构造函数中提供 TrialArray 的大小。

int A[] 更改为int *A 并使用new 动态分配它。 将给定构造函数的大小存储在this-&gt;len 中,然后像您所做的那样填充数组。

像这样:

#include <iostream>

using namespace std;

class TrialArray

    protected:
        int len;
        int *A;
    public:
        TrialArray(int size)
        
            A = new int[size];
            this->len = size;
            for (int i=0; i<this->len; i=i+1)
            
                this->A[i] = i;
            
        
        void print() 
            for (int i=0; i<this->len; i=i+1)
            

                std::cout << this->A[i] << '\t';
            
        
;

int main()

    TrialArray A(5);
    A.print();

    return 0;

【讨论】:

以上是关于在类中定义数组的方法和字段的主要内容,如果未能解决你的问题,请参考以下文章

c ++:使用模板在类中定义可变长度数组

如何在类中定义具有n个元素的数组[重复]

C++在类中定义vector并初始大小的问题

无法从数组中打印信息,无法弄清楚如何遍历存储在类中的数组?

在类中使用自定义排序时出现编译错误 [重复]

STM32的数组赋值