《C++言語基礎》実践参考——人数不定の給与類

1847 ワード

戻ってきます:賀先生の授業のリンク
【項目3-人数不定の給与類】
給与クラス(Salary)を設計し、データメンバーには従業員数(number、人数不定)とnumber従業員の給与salaryが含まれ、従業員の給与を入力し、1つずつ出力するように要求されます.
ヒント:number人の従業員の給料を固定サイズの配列で格納すると、空間の浪費を引き起こす可能性があり、空間が足りないため、従業員の人数が多すぎる応用を処理できない可能性があります.salaryをポインタタイプのメンバーとして宣言し、空間を動的に割り当てることで、適切なサイズの空間格納データを割り当てます.
class Salary
{
public:
    Salary(int n);  //n     ,           
    ~Salary();      //                
    void input_salary();  
    void show_salary();
private:
    double *salary;
    int number;
};
//          
……
//       
int main()
{
    Salary s(10);
    s.input_salary();
    s.show_salary();
    return 0;
}

[参考解答]
#include<iostream>
using namespace std;
class Salary
{
public:
    Salary(int n);
    Salary(const Salary &s);   //       ,                      ,    
    ~Salary();
    void input_salary();
    void show_salary();
private:
    double *salary;
    int number;
};

Salary::Salary(int n)
{
    number=n;
    salary = new double[number];  //      ,         
}

Salary::Salary(const Salary &s)
{
    number = s.number;
    salary = new double[number];
    for(int i=0;i<number; ++i)
        *(salary+i)=*(s.salary+i);
}

Salary::~Salary()
{
    delete []salary;   //  :                 
}

void Salary::input_salary()
{
    int i;
    cout << "   "<<number<<"      :" << endl;
    for(i = 0; i < number; ++i)
     cin >> *(salary+i);
    return ;
}

void Salary::show_salary()
{
    cout << "      : " ;
    for(int i = 0; i < number; ++i)
        cout << *(salary+i)<<" ";
    cout << endl;
    return ;
}

int main()
{
    Salary s1(10);
    s1.input_salary();
    Salary s2(s1);
    s1.show_salary();
     s2.show_salary();
    return 0;
}