«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > ## Почему мое значение температуры хранится в массиве вместо предполагаемой переменной в моем классе C ++?

## Почему мое значение температуры хранится в массиве вместо предполагаемой переменной в моем классе C ++?

Опубликовано в 2025-03-22
Просматривать:660

## Why is my temperature value being stored in the array instead of the intended variable in my C   class?

залежие переменные в C

В программировании объектно-ориентированного, затенение происходит, когда переменная, определенная в классе, имеет одинаковое имя, что и переменное во внешнем объеме. Это может привести к неожиданному поведению, поскольку внутренняя переменная имеет приоритет над внешней переменной.

задача: Задержка в классе

рассмотрим определение следующего класса:

class Measure {
    int N;
    double measure_set[];
    char nomefile[];
    double T;

    public:
    void get( );
    void printall( );
    double mean( );
    double thermal_comp( );
};

Метод GET в этом классе предназначен для чтения значений из файла и сохранения их в массиве MARE_SET, и для чтения значения температуры и сохранить его в переменной T.

, однако, когда вы реализуете метод GET следующим образом:

void Measure::get() {
    cout > nomefile;
    cout > measure_set[M];
        if (f.eof()) break;
        M  ;
    }
    f.close();
    N = M   1;

    cout > T;
    cout  

вы заметили, что значение температуры (t) хранится в первом элементе массива marue_set (mearge_set [0]) вместо предполагаемой T -переменной.

Solution

это происходит потому, что C допускает переменные с тем же наименованием, чтобы объявить в различных. В этом случае переменная t, объявленная в тени метода получения, переменная класса члена t.

, чтобы избежать затенения, вы можете либо использовать разные имена для переменных, либо использовать оператор разрешения области (: :) Чтобы явно ссылаться на переменную члена класса. this:

void мера :: get () { cout > nomefile; cout > secret_set [m]; if (f.eof ()) разрыв; М; } f.close (); N = m 1; cout > температура; T = температура; cout void Measure::get() { cout > nomefile; cout > measure_set[M]; if (f.eof()) break; M ; } f.close(); N = M 1; cout > temperature; T = temperature; cout

void recement :: get () { cout > nomefile; cout > secret_set [m]; if (f.eof ()) разрыв; М; } f.close (); N = m 1; cout > this-> t; // Использование оператора разрешения сферы для обозначения переменной члена класса cout ]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3