C ++ Установка количества элементов массива в классе - PullRequest
0 голосов
/ 15 ноября 2011

Привет. Я работаю над классом для метеостанции, который просит пользователя ввести переменные и передает часы в массив: вычисление значений для среднего, максимума и минимума. Я заставил его работать, но хочу сделать массив [elements] закрытым. Возможно ли это сделать?

Вот мой код. Заранее благодарю за любую помощь.

Brian

#include <iostream>
#include <iomanip>

using namespace std;

class WeatherStation
{
public:
    WeatherStation();
    void GetATemperatures(int[], int);
    void DisplayATemperatures( int[], int);
    void arrayCalcs(int[], int);

private:
    static const int aTemps = 24;
    static const int atemps[aTemps];
};

WeatherStation::WeatherStation()
{
    int atemps[aTemps];
}

void WeatherStation::GetATemperatures(int atemps[], int aTemps)
{
    for (int i = 0; i < aTemps; i++ )
    {
        cout << "Please enter the temperature for " << i  << ":00 ";

        while(true)
        {
            cin >> atemps[i];

            if(atemps[i] >= -50 && atemps[i] <= 130)
            {
                break;
            } else {
                cout << "This temperature is not valid\n";
                cout << "Please enter a temperature between -50 and 130 degrees F \n";
                cout << "Please enter a new temperature: ";
            }
        }
    }
}

void WeatherStation::DisplayATemperatures( int atemps[], int aTemps)
{
    cout << setw (5) << "Hour" << setw(24)<< "Temperature \n";
    cout << "\n";

    for (int k = 0; k < aTemps; k++)
    {
        cout << setw (3) << k << ":00" << setw (16) << atemps[k]<<endl;
    }

    cout <<"\n";
}

void WeatherStation::arrayCalcs(int atemps[], int aTemps)
{
    int sumA = 0;

    double average = 0.0;
    int minA = atemps[0];

    int maxA = atemps[0];

    int lowest = 0;
    int highest = 0;

    //Sum of the AM temps
    for (int kk = 0; kk < aTemps; kk++)
    {
        sumA = sumA + atemps[kk];
    }

    //calculation for average

    average = sumA  / aTemps;

    //Figuring out the Min and Max AM temps

    for (int MM = 0; MM < aTemps; MM++)
    {
        if(minA > atemps[MM])
        {
            minA = atemps[MM];
        }
        else if(maxA < atemps[MM])
        {
            maxA = atemps[MM];
        }

        lowest = minA;
        highest = maxA;
    }


    //Display of the Calculation results
    cout << "This is the average of todays temperatures: " << average <<endl;
    cout <<endl;
    cout << "Todays High temperature is: " << highest <<endl;
    cout <<endl;
    cout << "Todays Low temperature is: " << lowest <<endl;
}

int main()
{
    cout <<"Welcome to the weather station.\n";
    cout <<"Please enter Ferenheit temperatures for calculations: \n";

    WeatherStation alpha;
    alpha.GetATemperatures(atemps, aTemps);
    alpha.DisplayATemperatures(temps, Temps);
    alpha.arrayCalcs(temps,Temps);

    cout << "\n";

    system("pause");
    return 0;
}

1 Ответ

1 голос
/ 15 ноября 2011

1) Является ли массив atemps[]?Если это так, то это уже приватно ... в чем проблема?

2) Почему ваш член класса массива статичен?Не делайте этого без чертовски веских причин (и поскольку это похоже на домашнее задание, я почти уверен, что у вас нет чертовски веских причин).

3) У вашего конструктора бесполезная строкакода в нем - и это единственная строка в функции.

4) Ваш профессор не примет вас именования переменных atemps и aTemps - и если они пропустят это, я быочень обеспокоен качеством получаемого вами образования.Дело не в том, что имена переменных сами по себе являются большой проблемой, а в том, что вы называете их так схожим образом, поскольку это рецепт технического обслуживания, если это произойдет в реальном коде.

Редактировать -на основе нашего комментария-чата, вот мое предложение.Я не пытался скомпилировать это, и я не утверждаю, что это лучший (или даже предлагаемый) способ написания вашей программы ... Мое предложение ограничено тем, чтобы оставить данные в вашем объекте (таким образом, чтобы было место длярост за пределы этого вопроса / обсуждения).

#include <iostream>
#include <iomanip>

using namespace std;

class WeatherStation
{
public:
    WeatherStation();
    void GetATemperatures();
    void DisplayATemperatures();
    void arrayCalcs();

private:
    static const int aTemps = 24;
    int atemps[aTemps];
};

WeatherStation::WeatherStation()
{
}

void WeatherStation::GetATemperatures()
{
    for (int i = 0; i < aTemps; i++ )
    {
        cout << "Please enter the temperature for " << i  << ":00 ";

        while(true)
        {
            cin >> atemps[i];

            if(atemps[i] >= -50 && atemps[i] <= 130)
            {
                break;
            } else {
                cout << "This temperature is not valid\n";
                cout << "Please enter a temperature between -50 and 130 degrees F \n";
                cout << "Please enter a new temperature: ";
            }
        }
    }
}

void WeatherStation::DisplayATemperatures()
{
    cout << setw (5) << "Hour" << setw(24)<< "Temperature \n";
    cout << "\n";

    for (int k = 0; k < aTemps; k++)
    {
        cout << setw (3) << k << ":00" << setw (16) << atemps[k]<<endl;
    }

    cout <<"\n";
}

void WeatherStation::arrayCalcs()
{
    int sumA = 0;

    double average = 0.0;
    int minA = atemps[0];

    int maxA = atemps[0];

    int lowest = 0;
    int highest = 0;

    //Sum of the AM temps
    for (int kk = 0; kk < aTemps; kk++)
    {
        sumA = sumA + atemps[kk];
    }

    //calculation for average

    average = sumA  / aTemps;

    //Figuring out the Min and Max AM temps

    for (int MM = 0; MM < aTemps; MM++)
    {
        if(minA > atemps[MM])
        {
            minA = atemps[MM];
        }
        else if(maxA < atemps[MM])
        {
            maxA = atemps[MM];
        }

        lowest = minA;
        highest = maxA;
    }


    //Display of the Calculation results
    cout << "This is the average of todays temperatures: " << average <<endl;
    cout <<endl;
    cout << "Todays High temperature is: " << highest <<endl;
    cout <<endl;
    cout << "Todays Low temperature is: " << lowest <<endl;
}

int main()
{
    cout <<"Welcome to the weather station.\n";
    cout <<"Please enter Ferenheit temperatures for calculations: \n";

    WeatherStation alpha;
    alpha.GetATemperatures();
    alpha.DisplayATemperatures();
    alpha.arrayCalcs();

    cout << "\n";

    system("pause");
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...