第13週実験報告1
実験1.1目的:
プログラムを読み、実行結果を書き出し、チェックインします.
実験コード:
実行結果:
実験1.2目的:
Vehicleクラスの定義を虚関数に変更します.残りは変更しません.プログラムの実行結果を書いて、チェックイン時に理解してください.
実験コード:
実行結果:
実験1.3目的:
Vehicleクラスの定義を純虚関数に変更し、main()関数でコンパイルエラーが発生した行を削除(またはコメントに変更)する場合は、プログラムの実行結果を書き出し、アップロード時に照合して理解します.
実験コード:
実験結果:
実験の心得:
実験1.1から実験1.2最後から実験1.3まで、先生は本当に苦心していますね.実験1.1からベースクラスを指すポインタが派生クラスのデータにアクセスできません.一歩一歩虚関数の役割を体得しましょう.虚関数の役割は派生クラスでベースクラスと同名の関数を再定義することを許可し、ベースクラスのポインタや引用を通じてベースクラスと派生クラスの同名関数にアクセスし、最後に純虚関数にアクセスすることができます.派生クラスを必要に応じて定義するために、派生クラスの関数の名前を保持します.
プログラムを読み、実行結果を書き出し、チェックインします.
実験コード:
#include <iostream>
using namespace std;
class Vehicle
{
public:
void run() const {cout << "run a vehicle. " << endl;}
};
class Car:public Vehicle
{
public:
void run() const {cout << "run a car. " << endl;}
};
class Airplane:public Vehicle
{
public:
void run() const {cout << "run a airplane. " << endl;}
};
int main()
{
cout << "(a) : " << endl;
Vehicle v;
v.run();
Car car;
Airplane airplane;
car.run();
airplane.run();
cout << "(b) : " << endl;
Vehicle *vp;
vp = &car;
vp->run();
vp = &airplane;
vp->run();
system("pause");
return 0;
}
実行結果:
(a) :
run a vehicle.
run a car.
run a airplane.
(b) :
run a vehicle.
run a vehicle.
Press any key to continue
実験1.2目的:
Vehicleクラスの定義を虚関数に変更します.残りは変更しません.プログラムの実行結果を書いて、チェックイン時に理解してください.
実験コード:
#include <iostream>
using namespace std;
class Vehicle
{
public:
virtual void run() const {cout << "run a vehicle. " << endl;}
};
class Car:public Vehicle
{
public:
virtual void run() const {cout << "run a car. " << endl;}
};
class Airplane:public Vehicle
{
public:
virtual void run() const {cout << "run a airplane. " << endl;}
};
int main()
{
cout << "(a) : " << endl;
Vehicle v;
v.run();
Car car;
Airplane airplane;
car.run();
airplane.run();
cout << "(b) : " << endl;
Vehicle *vp;
vp = &car;
vp->run();
vp = &airplane;
vp->run();
system("pause");
return 0;
}
実行結果:
(a) :
run a vehicle.
run a car.
run a airplane.
(b) :
run a car.
run a airplane.
Press any key to continue
実験1.3目的:
Vehicleクラスの定義を純虚関数に変更し、main()関数でコンパイルエラーが発生した行を削除(またはコメントに変更)する場合は、プログラムの実行結果を書き出し、アップロード時に照合して理解します.
実験コード:
#include <iostream>
using namespace std;
class Vehicle
{
public:
virtual void run() const = 0;
};
class Car:public Vehicle
{
public:
virtual void run() const {cout << "run a car. " << endl;}
};
class Airplane:public Vehicle
{
public:
virtual void run() const {cout << "run a airplane. " << endl;}
};
int main()
{
cout << "(a) : " << endl;
Car car;
Airplane airplane;
car.run();
airplane.run();
cout << "(b) : " << endl;
Vehicle *vp;
vp = &car;
vp->run();
vp = &airplane;
vp->run();
system("pause");
return 0;
}
実験結果:
(a) :
run a car.
run a airplane.
(b) :
run a car.
run a airplane.
Press any key to continue
実験の心得:
実験1.1から実験1.2最後から実験1.3まで、先生は本当に苦心していますね.実験1.1からベースクラスを指すポインタが派生クラスのデータにアクセスできません.一歩一歩虚関数の役割を体得しましょう.虚関数の役割は派生クラスでベースクラスと同名の関数を再定義することを許可し、ベースクラスのポインタや引用を通じてベースクラスと派生クラスの同名関数にアクセスし、最後に純虚関数にアクセスすることができます.派生クラスを必要に応じて定義するために、派生クラスの関数の名前を保持します.