C++ 从C+传递数组+;构造函数

C++ 从C+传递数组+;构造函数,c++,arrays,function,constructor,pass-by-reference,C++,Arrays,Function,Constructor,Pass By Reference,如果我有一个包含数组的构造函数的类,并且我想将该数组的每个成员传递给该类的一个函数进行加法,那么我该如何做呢 例如,建造商实施 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[])

如果我有一个包含数组的构造函数的类,并且我想将该数组的每个成员传递给该类的一个函数进行加法,那么我该如何做呢

例如,建造商实施

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;
}
person::person
{
双重身份[150];//人数

对于(int j=0;j您的代码有点不完整。实际上,代码中有三个不同的数组,称为“NoPerson”,一个是构造函数的本地数组,一个是aveWage的参数,然后在aveWage中有一个本地声明的NoPerson数组。此外,您没有使用数组做任何事情,构造函数中的数组被删除当你离开构造函数时。如果你想用NoPerson数组作为aveWage的参数从构造函数中调用aveWage,你可以这样做,但是aveWage中的本地声明会掩盖它。

你的代码有点不完整。实际上,代码中有三个不同的数组叫做“NoPerson”,一个是构造函数的本地数组,一个是ar数组gument到aveWage,然后在aveWage中有一个本地声明的NoPerson数组。此外,您没有将数组用于任何事情,并且当您离开构造函数时,构造函数中的数组将被删除。如果您想从构造函数中调用aveWage,将NoPerson数组作为aveWage的参数,您可以这样做,但本地aveWage中的eclaration将屏蔽它。

它真的必须是数组吗?如果是这样,您需要将大小随它一起传递,例如
int add(int[]项,int size)
。本教程介绍数组的基本知识:


但是,数组是一个“普通C”的东西。如果你使用C++,你几乎总是使用.< /p>

它确实是一个数组吗?如果是这样,你需要把它和它一起传递,例如:代码> int添加(int []项,int size)< /> >。 但是,数组更多的是“普通C”的东西。如果你使用C++,你几乎总是使用一个.< /p>< p > 1。你的数组边界错误了(应该是代码> < 150 < /代码>)。 2) 在C++98/03中,您不能初始化成员数组;在C++11中,您可以(尽管初始化150个非零值很麻烦):

person::person():NoPerson{1,1,1.}{/code>(实际上是150个元素)。(不过,这个问题不太可能在正确的设计修改后仍然存在。)

3) 可以使用
std::acculate
(例如
std::cout1)编写
aveWage
循环。您的数组边界错误(应该是
<150

2) 在C++98/03中,您不能初始化成员数组;在C++11中,您可以(尽管初始化150个非零值很麻烦):
person::person():NoPerson{1,1,1.}{/code>(实际上是150个元素)。(不过,这个问题不太可能在正确的设计修改后仍然存在。)


3)
aveWage
循环可以用
std::acculate
编写(例如
std::cout我不知道我是否理解正确,但在我看来,您有一个数组(
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
}
班级人员
{
公众:
人()
{
对于(int i=0;i<150;i++)
NoPerson[i]=1;
}
双倍总计()
{
双倍总数;
对于(int i=0;i<150;i++)
总计+=无人员[i];
返回总数;
}
私人:
//“专用”部分中的变量和函数只能是
//由此类中的函数引用。
int NoPerson[150];//这是一个成员变量
}

正如您在上面的示例中所看到的,变量
NoPerson
是在类中定义的,而不是在函数中定义的。这使得类中的所有函数都可以访问该变量。

我不知道您是否理解正确,但在我看来您有一个数组(
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
}
班级人员
{
公众:
人()
{
对于(int i=0;i<150;i++)
NoPerson[i]=1;
}
双倍总计()
{
双倍总数;
对于(int i=0;i<150;i++)
总计+=无人员[i];
返回总数;
}
私人:
//“专用”部分中的变量和函数只能是
//由此类中的函数引用。
int NoPerson[150];//这是一个成员变量
}

正如您在上面的示例中所看到的,变量
NoPerson
是在类中定义的,而不是在函数中定义的。这使得类中的所有函数都可以访问它。

首先,在循环中循环一对多!其次,为什么不将
NoPerson
设置为类的成员变量?这是编程的基本规则是“零,一,多”。像“150”这样的数字基本上不应该出现在你的代码中。@JoachimPileborg你有例子吗?首先你在循环中循环一对多!其次,为什么不把
NoPerson
变成类的成员变量?编程的基本规则是“零,一,多”。像“150”这样的数字基本上不应该出现在您的代码中。@JoachimPileborg您有一个例子吗?但是如果我想让其他类访问这个变量-noPerson呢?那么您必须使该变量成为全局变量。在头文件中添加一个声明(