C++:通过引用传递(指向?)对象数组

标签 c++ arrays parameter-passing

我是 C++ 的新手,在使用指针传递和引用创建对象数组时遇到了很大的麻烦。这不是实际的代码;这是代码本质上所做的示例。

#include <iostream>

class MyClass
{
    public:
        MyClass();
        static int doStuff(MyClass *&classArray);
        void print_number();

    private:
        int number;
};

MyClass::MyClass()
{

}

int MyClass::doStuff(MyClass *&classArray)
{
    int i = 0;
    for (i = 0; i < 10; i++) {
        *classArray[i].number = i;
    }
    return i;
}

void MyClass::print_number()
{
    std::cout << number << "\n";
}

int main(void)
{
    MyClass *test = nullptr;
    int p = MyClass::doStuff(test);
    std::cout << p << '\n';
    for (int i = 0; i < 10; i++) {
        test[i].print_number();
    }
    return 0;
}

编译时,会出现段错误。

最佳答案

这就是您的操作方式(不要忘记在程序或析构函数的末尾使用 delete[] 删除 classArray:


new 运算符必须有默认构造函数,如果你想使用非默认构造函数,创建复制构造函数更容易,然后创建一个临时对象并复制。

#include <iostream>

class MyClass
{
public:
    MyClass();
    MyClass(int x, int y);
    MyClass(MyClass &OldClass);
    static int doStuff(MyClass *&classArray, int Size, int x, int y);
    void print_number();

private:
    int number, x, y;
};

MyClass::MyClass()
{
    number = 0;
    x = 0;
    y = 0;
}

MyClass::MyClass(int x, int y)
{
    number = 0;
    this->x = x;
    this->y = y;
}

MyClass::MyClass(MyClass &OldClass)
{
    this->number = OldClass.number;
    this->x = OldClass.x;
    this->y = OldClass.y;
}

int MyClass::doStuff(MyClass *&classArray, int Size, int x, int y)
{
    if (Size > 0)
    {
        classArray = new MyClass[Size];
        for (int i = 0; i < Size; i++)
        {
            classArray[i] = MyClass(x, y);
            classArray[i].number = i;
        }

        return Size;
    }
    else
        return 0;
}

void MyClass::print_number()
{
    std::cout << number << " " << x << " " << y << "\n";
}

int main(void)
{
    MyClass *test = nullptr;
    int p = MyClass::doStuff(test, 10, 5, 6);
    std::cout << p << '\n';
    for (int i = 0; i < p; i++) {
        test[i].print_number();
    }
    delete[] test;
    std::cin.get();
    return 0;
}

关于C++:通过引用传递(指向?)对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21789907/

相关文章:

bash 函数使用命令、管道和变量处理参数

arrays - bash:在查找函数中使用参数填充数组

c++ - 在主循环外绘制背景时闪烁

c++ - 我的 Makefile 或 C++ 程序有什么问题?

c++ - 改进的 K-means 聚类(Ward 准则)速度改进

javascript - 我的代码有什么问题。 JavaScript 幻灯片放映

php - 由逗号和新行一起展开

c++ - std::variant<>::get() 不能用 Apple LLVM 10.0 编译

php - 如何在函数php中向数组添加元素

Grails - 如何将一个 ID 从 View 发送到 Controller (多对多关系)