Передача массивов из конструктора C ++ в функцию - PullRequest
0 голосов
/ 10 ноября 2011

Если у меня есть класс с конструктором, содержащим массив, и я хочу передать каждый член этого массива в функцию этого класса для дополнения, как я могу это сделать?

например. Реализация конструктора

person::person 
{
  double NoPerson[150]; //no of people  
  for(int j=0;j<=150;j++)
  {
    NoPerson[j]=1.00;//has to set to 1 pound
  }

  double person::aveWage(double NoPerson[])
  {
    double total;
    double NoPerson[150];

    using namespace std;

    for(int i=0;i<=150 ;i++)
    { 
      total=total+cashCus[i];
    }
    cout<<"total cash for all customers "<<total <<endl;
}

Кто-нибудь знает, как этого можно достичь?

Ответы [ 4 ]

2 голосов
/ 10 ноября 2011

Это действительно должен быть массив? Если это так, вам нужно передать размер вместе с ним, например, int add(int[] items, int size). Этот урок охватывает основы массивов: http://www.cplusplus.com/doc/tutorial/arrays/

Тем не менее, массивы - это больше "простая C" вещь. Если вы используете C ++, вам почти всегда лучше использовать vector.

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

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

В этом случае вы не должны делать это локальной переменной, потому что тогда другая функция в классе не сможет получить к ней доступ.Вместо этого вы делаете его переменной-членом класса, как и функции.

Примерно так:

class Person
{
public:
    Person()
        {
            for (int i = 0; i < 150; i++)
                NoPerson[i] = 1;
        }

    double total()
        {
            double total;

            for (int i = 0; i < 150; i++)
                total += NoPerson[i];

            return total;
        }

private:
    // Variables and functions in the 'private' section can only be
    // referenced by the function in this class.

    int NoPerson[150];  // This is a member variable
}

Как вы можете видеть в приведенном выше примере, переменная NoPersonопределяется в классе , а не в функциях .Это делает его доступным для всех функций в классе.

0 голосов
/ 10 ноября 2011

1) Вы неправильно указали границы массива (это должно быть < 150).

2) В C ++ 98/03 нельзя инициализировать массивы-члены;в C ++ 11 вы можете (хотя инициализация 150 ненулевых значений громоздка): person::person() : NoPerson{1., 1., 1.} { } (фактически 150 элементов).(Маловероятно, что эта проблема переживет надлежащую ревизию проекта.)

3) цикл aveWage может быть записан с std::accumulate (например, std::cout << "total = " << std::accumulate(cashCus, cashCus + 150, 0) << std::endl;. В настоящее время ваш код не работает, потому что вы никогдаинициализировать total.

0 голосов
/ 10 ноября 2011

ваш код неисправен. На самом деле в коде есть три разных массива с именем NoPerson, один является локальным для конструктора, другой является аргументом для aveWage, а затем у вас есть локально объявленный массив NoPerson внутри aveWage. Кроме того, вы ни для чего не используете массивы, и массив в конструкторе удаляется при выходе из конструктора. Если вы хотите вызвать aveWage из конструктора с массивом NoPerson в качестве аргумента для aveWage, вы можете сделать это, но локальное объявление в aveWage замаскирует его.

...