120 likes | 254 Views
オブジェクト指向言語 オブジェクト指向言語演習. 第 28 回 C++ 言語 期末試験解説. スケジュール (C++ 言語 ). 期末試験の追試験を 2 月 8 日 ( 火 ) 5,6 時限 に実施します。 教室は新 4 号館 411 です。. 問題 1.
E N D
オブジェクト指向言語オブジェクト指向言語演習オブジェクト指向言語オブジェクト指向言語演習 第28回 C++言語 期末試験解説
スケジュール(C++言語) 期末試験の追試験を 2月8日(火) 5,6 時限 に実施します。 教室は新4号館411です。 Object Oriented Language - Y.Nagasaka: nagasaka@cc.it-hiroshima.ac.jp
問題1 • 以下のプログラムは、車の速度のみをメンバ変数として持つ Car クラスを利用したプログラムである。メイン文では、(a) 作成した車オブジェクト mycar の速度を表示(b) 入力した速度まで増加させ、その結果を表示(c) その後、3 だけ速度を減少させ、その結果を表示する。ここで、車クラスの速度は整数で表され、速度の増減は 1 づつしか行えないものとする。 以下のプログラムの抜けている部分を埋め、実行した結果が以下に示すようになるようなプログラムを完成させなさい。 ただし、解答には、抜けたところを埋めたプログラム全体を提出しなさい。 なお、speedUp メンバ関数、speedDown メンバ関数はそのオブジェクトの持つ速度を 1 だけ増減させる関数であり、また、getSpeed メンバ関数はそのオブジェクトの現在の速度を返す関数とする。 Object Oriented Language - Y.Nagasaka: nagasaka@cc.it-hiroshima.ac.jp
問題1 • この問題は指定されたメンバ関数(speedUp, speedDown, getSpeed)を作成する問題である。 • メンバ変数speedはスピードを保持しているprivateの変数なので、「speedUpはspeedを1つ増やす」、「speedDownはspeedを1つ減らす」、「getSpeedはspeedの値を返す」となる。 void Car::speedUp(){/******** この部分を作成する: 速度を 1 だけ増加させる関数 *********/speed++; // speed = speed + 1; やspeed += 1; でも同じ }void Car::speedDown(){/******** この部分を作成する: 速度を 1 だけ減少させる関数 *********/ speed--; // speed = speed - 1; やspeed -= 1; でも同じ}int Car::getSpeed(){/******** この部分を作成する: 現在の速度を返す関数 *********/ return speed;} Object Oriented Language - Y.Nagasaka: nagasaka@cc.it-hiroshima.ac.jp
問題2 Object Oriented Language - Y.Nagasaka: nagasaka@cc.it-hiroshima.ac.jp
問題2 Main 部 Object Oriented Language - Y.Nagasaka: nagasaka@cc.it-hiroshima.ac.jp
問題2 • クラス宣言部の作成 class Rocket { private: double speed, height; public: Rocket(void); Rocket(double h); ~Rocket(void); void setSpeed( double s = 0.0); void setHeight(double h = 0.0); double getSpeed(void); double getHeight(void); void print(void); }; Object Oriented Language - Y.Nagasaka: nagasaka@cc.it-hiroshima.ac.jp
問題2 • メンバ関数の作成 // コンストラクタ(引数なし) Rocket::Rocket( void ){ speed = 0.0; height = 0.0; } // コンストラクタ(引数1つ) Rocket::Rocket( double h ){ speed = 0.0; height = h; } // デストラクタ Rocket::~Rocket(){} // set get関数 void Rocket::setSpeed( double s ){ speed = s; } void Rocket::setHeight( double h ){ height = h; } double Rocket::getSpeed( void ){ return speed; } double Rocket::getHeight( void ){ return height; } // print関数 void Rocket::print( void ){ cout.width(4);cout.precision(3); cout.setf(ios::showpoint); cout << "Speed = " << speed << ", Height = " << height << endl; } cout.width(4); //幅4 cout.precision(3); //有効数字3桁 cout.setf(ios::showpoint); //小数点を表示 Object Oriented Language - Y.Nagasaka: nagasaka@cc.it-hiroshima.ac.jp
問題3 Object Oriented Language - Y.Nagasaka: nagasaka@cc.it-hiroshima.ac.jp
問題3 • クラスの宣言 class Aircraft:public Vehicle{ private: double z; public : Aircraft(void); Aircraft( double xx, double yy, double zz ); ~Aircraft(void); void setZ(double zz); double getZ(void); void print(void); }; Object Oriented Language - Y.Nagasaka: nagasaka@cc.it-hiroshima.ac.jp
問題3 • メンバ関数の定義 //コンストラクタ Aircraft::Aircraft(void){ setX(0.); setY(0.); z = 0.; } Aircraft::Aircraft( double xx, double yy, double zz ){ setX(xx); setY(yy); z = zz; } // xとyはVehicleクラスのメンバ変数でprivateなので、 // publicな関数setX,setYを使ってセットする必要がある Aircraft::~Aircraft(void){} void Aircraft::setZ( double zz ){ z = zz; } double Aircraft::getZ( void ){ return z; } void Aircraft::print(void){ cout << "x = " << getX() << ", y = " << getY() << ", z = " << z << endl; } // xとyはVehicleクラスのメンバ変数でprivateなので、 // publicな関数getX,getYを使ってアクセスする必要がある Object Oriented Language - Y.Nagasaka: nagasaka@cc.it-hiroshima.ac.jp
コンパイルと実行 • まずはじめに • 作業ディレクトリの作成 $ mkdir ~/wrk/ $ mkdir ~/wrk/oo/ • 次に • 作業ディレクトリへの移動 $ cd ~/wrk/oo • プログラミング $ vi oo20-1.cc • コンパイル・リンク $ g++ -o oo20-1 oo20-1.cc • 実行 $ ./oo20-1 * C++言語プログラムのファイル名は、.ccでなければならない 一度実行すればよい 注意 • * プログラムが終了しなくなったら • Ctrl キーを押しながら c • を押して強制終了すること Object Oriented Language - Y.Nagasaka: nagasaka@cc.it-hiroshima.ac.jp