在类中定义数组的方法和字段
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->len
变量,而不是全局静态len
。
另外你还没有指定数组的大小。
您需要更改代码以正确引用全局变量。更好的方法是在构造函数中提供 TrialArray 的大小。
将int A[]
更改为int *A
并使用new
动态分配它。
将给定构造函数的大小存储在this->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;
【讨论】:
以上是关于在类中定义数组的方法和字段的主要内容,如果未能解决你的问题,请参考以下文章