2015級C++第8週プロジェクト配列とポインタ

5835 ワード

【項目1-データメンバーとして配列】参考解答は、設計された給与クラス(Salary)です.
class Salary  
{  
public:
    void set_salarys( );//      (  -1         ),     salary   ,       number ;
    void add_salarys(int x); //     x   
    void sort_salarys(); //         
    void show_salarys( ); //      
private:  
    double salarys[50]; //      
    int number;  //     
};  

(1)Salaryクラスのメンバー関数を実現し、main関数でSalaryクラスのオブジェクトを定義し、給与を入力し、一人当たり500元ずつ給与を上げ、ソートして給与データを出力する.(2)手作業で給与を入力?!我慢できない.500人未満の従業員給与を含むファイルsalary.txtを与える(ダウンロード)、ファイルからデータを読み出し、メンバー関数を追加し、ソート後の結果をファイルに保存します.main関数を作成し、拡張した機能をテストします.(3)最後のプログラムをマルチファイルで整理します.
【項目2-オブジェクト配列で直方柱クラスを操作する】参考解答オブジェクトベースのプログラムを作成し、5つの直方柱の体積と表面積を求める.直方柱クラスBulkのデータメンバーには、長(length)、幅(width)、高(heigth)などが含まれる.すでに与えられたコードに照らして、やるべき仕事と要求は以下の通りである.
  • は、5つのボックスオブジェクトからなるオブジェクト配列bがコードに示されているボックスクラスを定義する必要があります.
  • B配列の最初の3つのオブジェクトb[0]、b[1]、b[2]の直接パラメータが初期化され、コンストラクション関数を定義する必要があるが、初期化では、各オブジェクトが提供するパラメータの数が異なり、デフォルトパラメータを持つコンストラクション関数(与えられていないパラメータのデフォルトは1.0)
  • が必要である.
  • の4番目のオブジェクトb[3]はデフォルトの構造関数で初期化される.
  • はメンバー関数outputを設計し、mainでこの5つのボックス柱の体積と表面積を呼び出す.
  • int main()  
    {  
         Bulk b[5]={Bulk(2.3,4.5,6.7),Bulk(1.5,3.4),Bulk(10.5)};  
         b[4].get_value();  
         //       5            
    }  

    【項目3-学生クラスへのポインタ】参考解答学生クラスStudioを設計し、データメンバーには学号(num)と成績(score)が含まれ、メンバー関数は必要に応じて自分で設計する(必要なset、get関数、および必要な入出力を配置することを提案し、与えられたコードにもメンバー関数が必要な手がかりを見つけることができる).main関数では、オブジェクト配列を作成し、初期化を通じて、5人の学生のデータを設定する;ポインタで配列の頭要素を指し、1、3、5人目の学生の情報を出力する;関数int max(Student*arr)を設計します.オブジェクトを指すポインタを関数パラメータとし,max関数で5人の学生の中で最も成績が高い者を探し出し,その学号を返す.以下に、プロジェクトを完了するためのプログラムの一部を示します.
    class Student {  
    public:  
        ……  
    private:  
        int num;   //   
        double score;   //   
    };  
    
    //max    arr                 (max       ,      ) 
    int max(Student *arr);  
    
    int main()  
    {  
        Student stud[5]=  
        {  
            Student(101,78.5),Student(102,85.5),Student(103,100),  
            Student(104,98.5),Student(105,95.5)  
        };  
        //   1、3、5      (     ) 
        ……  
        //           
        cout<<"5             : "<<max(stud);//           
        return 0;  
    }  

    【項目4-ゲーム中のキャラクタークラス強化版】(4-1)ブログ「C++ゲームシリーズ4:殺傷距離に制限がある」(リンク…)を読み、次の質問に答えます.では、そのコンストラクション関数定義のポイントは何ですか?Role::attackメンバー関数をよく読み、攻撃行為の条件や、攻撃行為でやるべきことを話す.直接コピー中のプログラムを作成し、マルチファイルプロジェクトを作成し、プログラムを実行し、main関数を修正し、実行結果の変化を観察する(本プロジェクトのテストが不十分で、コメントを書くBUGを歓迎する).
    (4-2)上記のプロジェクトに基づいて、Weaponクラスのデータメンバーを配列に変更して、1つのロールが複数の武器を持つことができる需要をサポートします.そのため、元のクラスに基づいて、改造および増加したデータメンバーとメンバー関数は少なくとも以下のとおりです.
    class Role
    {
    public:
        ……
        void changeWeapon(int wno); //      
    private:
        ……
        Weapon weapons[N];  //  ,N       
        int weaponNum;      //    
        int holdWeapon;     //         (           )。
                             //0 ≤ holdWeapon < weaponNum
                             //      ,   holdWeapon  -1, -1        )
    };

    ヒント:他のメンバー関数も変更する必要があります(コンストラクション関数、出力に使用するメンバー関数など)、必要に応じて変更してください.
    参考解答
    (4-3)以上の項目は、ゲームをサポートするためのクラスがほぼ整っており、ゲームに複数のキャラクターが参加できるように、限られたロールクラスのオブジェクトを定義することに頼ることなく、コードプレイを通じて、現在は1つのゲームのプレゼンテーションを行い、任意の複数のオブジェクトを自動的にPKを展開させたいと考えています.(あなた自身の策略があることができます):ロール類の配列を定義して、ゲームに参加する役を表します;役が持つ可能性のある武器、1つのファイルweapon.txtから提供して、武器名、殺傷力と殺傷半径を含みます(ダウンロード可能…、自分でこのファイルを作成することも可能)ロールクラスの配列内のオブジェクトに対して初期値を設定することを定義し、各ロールクラスのオブジェクトの名前、血量、位置、武器などを含め、発生した乱数によって確定することができる乱数によって各ゲームの中で、行動するロール、および実行する行動を確定する(移動、武器交換、攻撃、食べるなど)、ループを通じて複数ラウンドのゲームを組織します.ラウンド数が多すぎる場合は、各ラウンドで発生したストーリーをファイルで保存し、ファイルを見ることで、ゲームの過程を知ることができます.
    参考解答