Как передать массив объектов в функцию?

#c #function #object #inheritance #arrayobject

Вопрос:

 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
}
 

Комментарии:

1. Почему вы не хотите использовать for петлю? Это кажется приемлемым решением.

2. Вы создали max функцию-член класса, поэтому вам нужно вызвать ее в экземпляре. Если вы хотите иметь функцию, которая принимает массив department s, вам нужно написать такую функцию

3. Точный синтаксис a.max(a,n); невозможен, потому a что это не класс (а скорее массив).

4. Придирка: max неявно является частной функцией-членом department . Поэтому дочерний класс B не имеет доступа max , поэтому даже при наличии экземпляра B для вызова max вы получите сообщение об ошибке.

Ответ №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;
} 
 

Онлайн-Демонстрация

Альтернативно:

 class department {
};

class B : public department {
};

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

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

Онлайн-Демонстрация

Ответ №2:

Как передать массив объектов в функцию?

Параметр функции не может быть массивом в C . Параметр может быть ссылкой на массив. В качестве альтернативы обычно передается итератор, указывающий на элемент массива. Указатель на объект является итератором для массива.

department::max() является нестатической функцией-членом. У него пустой список параметров, поэтому он вообще не принимает аргументов, за исключением неявного экземпляра класса, который используется в качестве левого операнда оператора доступа к элементу. Поскольку эта функция не принимает ни ссылку на параметр массива, ни параметр указателя, передать массив в качестве аргумента невозможно.

Вот пример функции, которая принимает ссылку на массив в качестве параметра, и о том, как вызывать такую функцию:

 void max(B (amp;arr)[10]);

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

Комментарии:

1. да , я понял, я также спрашивал, какие параметры я должен передать в функции max.

2. @VishalOjha Вы ничего не можете сделать, чтобы передать массив в свою функцию department::max() . Я показал, как передать массив в другую max функцию, которая принимает ссылку на массив в качестве параметра.