int className(baseClassName** obj,int a)
Что я должен отправить baseClassName** для выполнения операций?
Предположим, у вас есть переменные baseClassName *p, **pp;
. Вы можете передать nullptr
, или &p
, или pp
в качестве аргумента, и все они скомпилируются. Однако то, что вам нужно на самом деле пройти, зависит от того, что ожидает className
, о чем вы не предоставили подробностей.
Пожалуйста, введите «окончательный список книг и руководств по C++» в строку поиска вверху, там вы сможете найти несколько руководств, которые объяснят этот синтаксис. Как новый пользователь здесь, пожалуйста, также пройдите тур и прочитайте Как спросить. По вашему вопросу, что туда поставить, сказать невозможно, потому что вы не говорите, чего хотите добиться. Другими словами, отсутствует более широкий контекст.
baseClassName** obj
, вероятно, является указателем на массив указателей на объекты baseClassName. Синтаксис C++ не делает различий между указателем на объект и указателем на массив объектов. В C++ для поддержки полиморфизма необходим указатель или ссылка на базовый класс, иначе передача по значению вызовет нарезку, что (обычно) является ошибкой.
Это означает указатель на указатель, и, хотя это модно писать так, предпочтительнее писать как baseClassName **obj
, как это объявление:
baseClassName** obj, obj2;
предположим, что obj2 - это указатель на указатель, но на самом деле это baseClassName.
Это означает, что у вас есть 2 косвенных ответа. Obj — это указатель на указатель baseClassName
. Поскольку int
также передается, я могу предположить, что это может быть размер 2d массива указателей на baseClassName
объекты, выделенные в куче.
вы должны перейти к этой функции, будет выглядеть так.
int size = 5;
baseClassName** obj = new baseClassName*[size];
for (int i = 0; i < size;++i){
obj[i] = new baseClassName[size];
}
Теперь вы можете вызвать эту функцию следующим образом:
int num = className(obj, size);
и да, не нужно освобождать память после того, как вы ее использовали.
for(int i = 0; i < size; ++i){
delete [] obj[i];
}
obj
— указатель на указатель