#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
функцию, которая принимает ссылку на массив в качестве параметра.