Что такое ** в следующем: int className (baseClassName ** obj, int a) в полиморфизме С++?

int className(baseClassName** obj,int a)

Что я должен отправить baseClassName** для выполнения операций?

obj — указатель на указатель
Krishna Kanth Yenumula 25.12.2020 09:13

Предположим, у вас есть переменные baseClassName *p, **pp;. Вы можете передать nullptr, или &p, или pp в качестве аргумента, и все они скомпилируются. Однако то, что вам нужно на самом деле пройти, зависит от того, что ожидает className, о чем вы не предоставили подробностей.

dxiv 25.12.2020 09:19

Пожалуйста, введите «окончательный список книг и руководств по C++» в строку поиска вверху, там вы сможете найти несколько руководств, которые объяснят этот синтаксис. Как новый пользователь здесь, пожалуйста, также пройдите тур и прочитайте Как спросить. По вашему вопросу, что туда поставить, сказать невозможно, потому что вы не говорите, чего хотите добиться. Другими словами, отсутствует более широкий контекст.

Ulrich Eckhardt 25.12.2020 10:13
baseClassName** obj, вероятно, является указателем на массив указателей на объекты baseClassName. Синтаксис C++ не делает различий между указателем на объект и указателем на массив объектов. В C++ для поддержки полиморфизма необходим указатель или ссылка на базовый класс, иначе передача по значению вызовет нарезку, что (обычно) является ошибкой.
Eljay 25.12.2020 13:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это означает указатель на указатель, и, хотя это модно писать так, предпочтительнее писать как 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];
    }

Другие вопросы по теме