【问题标题】:How to pass object array to a function?如何将对象数组传递给函数?
【发布时间】:2021-11-26 03:09:13
【问题描述】:
class department
{
    void max() ***HOW TO PASS ARRAY OF OBJECT HERE , WHAT PARAMETERS SHOULD I PASS***
    {
    } 
};

class B : public department {
};

int main()
{
    B a[10];
   
    // a.max(a,n);  ***HOW TO CALL THIS max FUNCTION***
    return 0;
} 

我想将对象数组a[10] 传递给max 函数。如何调用和传递?

我不想这样:

for(i = 0; i < n; i++)
{
    a[i].max
}

【问题讨论】:

  • 为什么不想使用for 循环?这似乎是一个可以接受的解决方案。
  • 您将max 设为类的成员函数,因此您必须在实例上调用它。如果你想有一个函数接受departments 的数组,那么你必须编写这样一个函数
  • 确切的语法a.max(a,n); 是不可能的,因为a 不是一个类(而是一个数组)。
  • Nitpick: max 隐含地是 departmentprivate 成员函数。子类B 因此无权访问max,所以即使给定B 的实例来调用max,也会出现错误。

标签: c++ function object inheritance arrayobject


【解决方案1】:

您将max() 实现为department非静态 方法,因此您需要一个department 对象来调用它,就像数组中的每个B 对象一样,例如:

for(int i = 0; i < 10; ++i)
{
    a[i].max();
}

如果这不是你想要的,那么max() 需要从department 中删除,或者至少改为static。无论哪种方式,您都必须更改其输入参数以接受该数组。

试试类似的方法:

class department
{
public:
    static void max(department *depts, int count)
    {
        //...
    } 
};

class B : public department {
};

int main()
{
    B a[10];
    department::max(a, 10);
    return 0;
} 

Online Demo

或者:

class department {
};

class B : public department {
};

void max(department *depts, int count)
{
    //...
} 

int main()
{
    B a[10];
    max(a, 10);
    return 0;
} 

Online Demo

【讨论】:

    【解决方案2】:

    如何将对象数组传递给函数?

    函数的参数在 C++ 中不能是数组。参数可以是对数组的引用。或者,通常传递指向数组元素的迭代器。对象指针是数组的迭代器。

    department::max() 是一个非静态成员函数。它有空参数列表,因此它根本不接受任何参数,除了用作成员访问运算符的左操作数的隐式类实例。由于此函数不接受对数组参数或指针参数的引用,因此无法将数组作为参数传递。

    下面是一个接受数组引用作为参数的函数的示例,以及如何调用此类函数:

    void max(B (&arr)[10]);
    
    int main()
    {
        B a[10];
        max(a);
    }
    

    【讨论】:

    • 是的,我明白了,我也在问我应该在函数 max 中传递什么参数。
    • @VishalOjha 您无法将数组传递给您的函数department::max()。我已经展示了如何将数组传递给不同的 max 函数,该函数接受对数组的引用作为参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2019-12-13
    相关资源
    最近更新 更多