как получить доступ к функции производного класса из абстрактного указателя базового класса, когда этот указатель хранится в векторе [дубликат]

Мы можем использовать метод parseInt(String str) класса оболочки Integer для преобразования значения String в целочисленное значение.

Например:

String strValue = "12345";
Integer intValue = Integer.parseInt(strVal);

Integer также предоставляет метод valueOf(String str):

String strValue = "12345";
Integer intValue = Integer.valueOf(strValue);

Мы можем также использовать toInt(String strValue) из класса Utility Utility для преобразования:

String strValue = "12345";
Integer intValue = NumberUtils.toInt(strValue);

4
задан user906357 27 September 2013 в 05:09
поделиться

5 ответов

Использовать новый оператор

int * count()
{
    int myInt = 5;

    int * p = new int;
    *p = myInt;

    return p;
}

Как указано в других ответах, это, как правило, плохая идея. Если вы должны сделать это так, то, возможно, вы можете использовать умный указатель. См. Этот вопрос, как это сделать. Что такое умный указатель, и когда следует использовать его?

8
ответ дан Community 24 August 2018 в 02:21
поделиться

Если вы хотите правильно вернуть указатель переменной, вам нужно что-то сделать.

int * myInt = new int(5);

Это не локальная переменная BTW, то есть у нее нет автоматического хранилища, и вы должны delete сами запомнить

с использованием указателей, подобных этому, как правило, не нужно и не рекомендуется. Лучше создать int вне функции и заставить функцию взять ссылку.

void count(int & i)
{
    i = 5;
}

BTW Я не знаю, как вы планируете использовать эту переменную, но так как вы также предложили использовать глобальную переменную вы можете использовать static var, который предложил @JonathanPotter. Во многом статическая переменная похожа на глобальную переменную (оба имеют статические временные хранения)

2
ответ дан aaronman 24 August 2018 в 02:21
поделиться

Ошибка возврата указателя на локальную переменную. x указывает на переменную, выделенную в куче:

link x = new node(a[m]);
Thus x isn't pointing to a local variable.

Причина, по которой возвращать указатель на локальную переменную, является ошибкой в ​​том, что такая переменная существует только до тех пор, пока функция активна (т. е. между ним вводится и завершается). Переменные, выделенные в куче (например, с использованием нового оператора), существуют до тех пор, пока они не будут освобождены (например, с оператором удаления).

2
ответ дан Anne Staley 24 August 2018 в 02:21
поделиться

Вы можете использовать интеллектуальные указатели.

Например:

unique_ptr<int> count()
{
   unique_ptr<int> value(new int(5));
   return value;
}

Затем вы можете получить доступ к целому следующему:

cout << "Value is " << *count() << endl;
6
ответ дан Arnav Borborah 24 August 2018 в 02:21
поделиться

Вы можете сделать это, сделав переменную static:

int* count()
{
    static int myInt = 5;
    return &myInt;
}
4
ответ дан Jonathan Potter 24 August 2018 в 02:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: