【问题标题】:How to set an array in a class in C++如何在 C++ 中的类中设置数组
【发布时间】:2019-09-17 06:45:14
【问题描述】:

我想使用 setter 方法将数字数组存储在类的私有变量中,但不确定如何。

该程序需要一个默认构造函数和其他基本方法,但为简单起见,我只提供了默认构造函数。

class numberList{
public:
    numberList()
    {
        numberStore = new int[8];
    } // default constructor

    void setter() // not sure what goes here
    {
        //not sure what goes here
    }

private:
    int* numberStore;
};

int main()
{
    numberList list1;
    list1.setter(1,2,3,4,5,6,7)
}

我希望 list1.setter() 将所有值放入数组中。我认为 memcpy() 可以在这里使用,但不确定。

我知道有一个运算符重载的概念,但不确定如何利用它。任何帮助将不胜感激:-)

编辑:不幸的是,作业要求我不要使用标准库:-(

【问题讨论】:

  • 如果您的数组的大小在编译时已知,请改用std::array。如果仅在运行时知道大小,请使用 std::vector
  • 数组有 8 个数字的空间。数组需要一次性设置全部 8 个,还是调用者可以设置更少?可变参数模板或std::initializer_list 在这里可能很有用。 .
  • @RemyLebeau 数组不一定要满,但是这个作业老师禁止使用标准库
  • 那么首先,除非大小是在运行时计算的,否则使用 actual 数组(如int numberStore[8];)。其次,如果一次只设置一个元素是可以的,那么可能是像void set(unsigned index, int value);这样的函数
  • 最简单的方法是使用数组,如the answer by RoQuOTriX 所示。但是你也可以使用variadic function(我真的不建议初学者使用)。

标签: c++ arrays class operator-overloading setter


【解决方案1】:

根据您不能使用 STL 的评论,解决方案是使用原始 C 指针算术。

你可以给你的setter函数一个int* pointernumber of elements

void setter(int* arr, int n) {
    for(int i = 0; i < n; i++)
        numberStore[i] = arr[i]
}

然后你可以像这样在 main() 中调用你的 setter 函数:

int main() {
    numberList list1;
    int arr[] = {1,2,3,4,5,6,7};
    list1.setter(arr, 7);
}

【讨论】:

  • 这对n &gt; 8来说看起来很危险
  • 感谢您的支持 - 我将在我的解决方案中实现这一点。看起来比可变参数函数更简单
  • @eike 我有一个扩展数组的方法,我可以在 setter 中调用,所以应该没问题
  • @nutellasandwich 没关系,但仅此答案中的代码就会破坏你的ns 堆太大。
【解决方案2】:
#include "pch.h"
#include <iostream>
#include <string>

int* my_array = new int[10];

void setter(int* arr, int n)
{
    memcpy(&my_array[0], &arr[0], n * sizeof(int));
}


int main()
{
    int* arry = new int[10];
    for (int i=0; i< 10; i++)
    {
        arry[i] = i;
    }

    setter(arry, 10);

    for (int i = 0; i < 10; i++)
    {
        std::cout<<(std::to_string(my_array[i]));
    }
}

【讨论】:

    猜你喜欢
    • 2014-11-22
    • 1970-01-01
    • 2020-01-14
    • 2012-08-20
    • 2010-10-15
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    相关资源
    最近更新 更多