第13週実験報告1

3871 ワード

実験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からベースクラスを指すポインタが派生クラスのデータにアクセスできません.一歩一歩虚関数の役割を体得しましょう.虚関数の役割は派生クラスでベースクラスと同名の関数を再定義することを許可し、ベースクラスのポインタや引用を通じてベースクラスと派生クラスの同名関数にアクセスし、最後に純虚関数にアクセスすることができます.派生クラスを必要に応じて定義するために、派生クラスの関数の名前を保持します.