2011-11-10 3 views
0

배열을 포함하는 생성자가있는 클래스가 있고이 배열의 각 멤버를이 클래스의 함수에 전달하면 어떻게 할 수 있습니까?배열을 C++ 생성자에서 함수로 전달

생성자 구현

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; 
} 

사람이 달성 할 수있는 방법을 알고 있나요?

+0

먼저 루프에서 하나에서 많은 루프를 반복하십시오! 둘째,'NoPerson'을 클래스의 멤버 변수로 사용하는 것이 어떻습니까? –

+0

프로그래밍의 기본 규칙은 "zero, one, many"입니다. "150"과 같은 숫자는 기본적으로 코드에 나타나지 않아야합니다. –

+0

@ JoachimPileborg 예가 있습니까? – jis

답변

1

I로 기록 될 수있다 이해가 안될지 모르겠지만, 배열에 (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

하지만 다른 클래스가이 변수 (noPerson)에 액세스하도록하려면 어떻게해야합니까? – jis

+0

그러면 전역 변수를 만들어야합니다.헤더 파일 ('extern int NoPerson [];')에 선언을 추가 한 다음 변수가 필요한 모든 위치에 해당 헤더를 포함하십시오. 그리고 한 소스 파일에서 변수를 정의한다 ('int NoPerson [150];'). –

0

코드가 손상되었습니다. 실제로 코드에서 'NoPerson'이라는 3 개의 다른 배열이 있습니다. 하나는 생성자에 대해 로컬이고, 하나는 aveWage에 대한 인수이며, aveWage 내에 로컬로 선언 된 NoPerson 배열이 있습니다. 또한 배열에 아무것도 사용하지 않고 생성자를 떠날 때 생성자의 배열이 삭제됩니다. NoPerson 배열을 인수로 사용하여 생성자에서 aveWage를 호출하려면이 작업을 수행 할 수 있지만 aveWage의 로컬 선언은이를 마스크합니다.

+0

감사합니다. 매우 도움이되었습니다. – jis

2

실제로 배열이어야합니까? 그렇다면 크기와 함께 전달해야합니다. int add(int[] items, int size). 이 튜토리얼에서는 배열의 기본에 대해 다룹니다. http://www.cplusplus.com/doc/tutorial/arrays/

그러나 배열은 "평범한 C"것입니다. C++을 사용하는 경우 거의 항상 vector을 사용하는 것이 좋습니다.

0

1) 배열 범위가 잘못되었습니다 (< 150이어야 함).

2) C++ 98/03에서는 멤버 배열을 초기화 할 수 없습니다. C++ 11에서는 (0이 아닌 값을 초기화하는 것은 번거롭지만) person::person() : NoPerson{1., 1., 1.} { } (실제로 150 개 요소)을 사용할 수 있습니다. (그것은이 문제가 있지만, 적절한 설계 변경을 살아남을 가능성은 낮습니다.)

3)이 aveWage 루프가 std::accumulate (예 std::cout << "total = " << std::accumulate(cashCus, cashCus + 150, 0) << std::endl;. 당신이 total를 초기화하지 않기 때문에 현재 코드가 나뉩니다.

관련 문제