如何在主函数中获取整数输入并在任何类中创建该大小的数组?

Posted

技术标签:

【中文标题】如何在主函数中获取整数输入并在任何类中创建该大小的数组?【英文标题】:how to take an integer input in main function and make an array of that size in any class? 【发布时间】:2015-08-24 07:50:13 【问题描述】:

例如,

class Quota
    private:
        int t_quota, intake, ID[];
        float percentage[];
;

这是我要修改的类。这里是主函数,我将从中传递一个整数值来设置 Quota 类中两个数组的大小。

int main()
    int intake;

    cout<<"Enter the total number of students who took the test this session of 2015, September: ";
    cin>>intake;
    Quota qr(intake);

我在这里要做的事情是调整两个数组的大小,即。 ID[]percentage[] '摄入'。如ID[intake]percentage[intake]。 可以做到吗?我想是的,但我尝试通过构造函数但没有正确。有人知道这是怎么做到的吗?

【问题讨论】:

这只是打击我。我们创建一个全局变量并将输入存储在那里怎么样? 使用std::vector 推荐std::vector 的评论包含指向其参考站点的链接。如果您只是快速搜索一下,也有很多关于如何使用它的示例。 【参考方案1】:

您不能创建在编译时未知的固定大小的数组。 这意味着您需要在构造函数中分配所需大小的数组,然后在析构函数中释放它。

但我建议使用std::vector 来达到此目的。

class Quota
    Quota(const int size): ID(size), percentage(size)
    
    

    private:
        int t_quota, intake;
        std::vector<int> ID;
        std::vector<float> percentage;
;

【讨论】:

我如何分配'size'变量的值?正常的方式? 配额 q(size, id, per);这是将参数传递给上述构造函数的正确方法吗? @SubhamKharel 就像您在问题中所写:Quota qr(intake); @SubhamKharel 构造函数只接收一个参数(假设所有向量应该具有相同的大小)。如果您需要支持不同的大小,请将构造函数更改为:Quota(const int size1, const int size2): ID(size1), percentage(size2)【参考方案2】:

实际上,我们应该避免在c++中使用低级数据结构,例如array。您应该使用vector&lt;int&gt; ID, vector&lt;float&gt; percentage,而不是ID[], percentage[]。然后您可以在Qouta 的构造函数中设置ID and percentage 的大小。例如:

Quota::Quota(const int& intake)

    ID.resize(5); //set ID's size
    percentage.resize(5);

希望对你有帮助。

【讨论】:

数组是不可避免的,不好的建议。另一方面,动态分配的数组... @CoffeeandCode,你可以使用std::array,而不是int ID[]。可以吗?顺便说一句,c++ primer 已经说得很清楚了。 我知道你可以,但仅仅因为你可以并不意味着你必须这样做,或者这是更好的做法。 另外,你的规则真的只适用于初学者。我经常使用低级构造并且无法绕过它。否则,我将如何实现诸如std::arraystd::vector 之类的东西?【参考方案3】:

当您在运行时确定数组的大小时,您无法在编译时对其进行初始化。

也许你可以尝试先分配它然后分配一个指针。 这将起作用。但我不确定它是否符合您的要求。

class Quota
public :
    Quota(int size);
    int *  allocate_ID(int size);
private:
    int t_quota, intake;
    int * ID;
    float percentage[];
 ;

 Quota::Quota(int size)
 
     ID = allocate_ID(size);
 

 int * Quota::allocate_ID(int size)
 
     int * ID_arr = new int[size];
     return ID_arr;
 

int main()
     int intake;

     cout<<"Enter the total number of students who took the test this session of 2015, September: ";
     cin>>intake;
     Quota qr(intake);
 

【讨论】:

以上是关于如何在主函数中获取整数输入并在任何类中创建该大小的数组?的主要内容,如果未能解决你的问题,请参考以下文章

通过其他类构造函数在主方法中创建对象时访问对象属性

写一个求整数平方的函数,在主函数中由键盘输入一个整数,调用此函数并且把平方值显示出来 c语言

用调用函数,用"起泡法"对输入的10个整数按从小到大顺序排列

如何在一个类中创建 CoreData 实体并在另一个类中访问?

写一个函数,使N个整数按由小到大的顺序排列,要求在主函数中输入10个数,并输出排好序的数

C语言编程