c++:実験七継承と派生

34952 ワード

1.実験目的継承と派生に関する理論を学習し、異なる継承方式の下でベースクラスのメンバーに対するアクセス方式を熟知し、以下のいくつかの方面を含む:(1)宣言と使用クラスの継承関係を学習し、派生クラスを宣言する;(2)異なる継承方式の下で、ベースクラスメンバーへのアクセス制御を熟知している.2実験内容2.1駐車場プログラム(1)問題の説明はテーマの要求に従って簡単な駐車場管理プログラムを完成してください.1.駐車場(Park)にはN個の駐車スペース(space)があり、各駐車スペースにはトラック(Truck)、乗用車(Car)、バス(Bus)を含む異なるタイプの自動車(Automobile)を駐車することができるが、同じ時刻に1個の駐車スペースには0または1台の自動車しか駐車できない.空き駐車スペースがない場合は、ヒントが表示されますが、車両の駐車スペースは手配されません.2.プログラムは車両の駐車状況をシミュレートする:新しく来た車両に空席があれば、その車に順番に駐車スペースを割り当てる.車が出発するときは、駐車料金を払わなければなりません.3.駐車場には、現在駐車している車両のナンバープレートと、現在の駐車料金収入(income)がすべて表示されます.4.ナンバープレート(文字列)のメンバーデータを含む自動車ベースのAutomobileを定義します.5.派生クラスTruck、Car、Busを定義します.これらの車両はナンバープレートのほか、それぞれ異なる属性を持っている.Truckはまた、荷重特性(浮動小数点数、単位トン)を含む.Carにはブランド属性(文字列)もあり、Busには承認者数(整数)も含まれています.また、各派生クラスではpay()関数を実装し、車両情報を表示し、駐車料金を支払う.このうち、Truckは3元/回、Carは1元/回、Busは2元/回です.(2)問題はプログラムを作成し,上記で要求した各種機能をテストすることを要求する.新しいプロジェクトParkManagerを作成し、必要なソースファイルとヘッダファイルを追加し、プログラムの適切な場所にコメントを作成する必要があります.class Automobile {};//自動車類class Park{};//駐車場類int main(){cout<<<「駐車スペース数を入力してください:」;cin>>N;//駐車スペース数を入力し、ここに2を入力
Park *park = new Park(N);//駐車場オブジェクトの作成
Car car 1("魯B-12345","アウディA 6");//乗用車オブジェクトcar 1を作成する.enter(park);//car 1は駐車場に入り、駐車スペースを割り当てる
Truck truck("魯B-23456",15);//トラックオブジェクトtruckを作成する.enter(park);//truckは駐車場に入り、駐車スペースを割り当てます
car1.leave(park);//car 1駐車場を出て、駐車料金を払う
Bus bus(「魯B-34567」,50);//バスオブジェクトbusを作成する.enter(park);//busは駐車場に入り、駐車スペースを割り当てる
/*現在駐車されている車両のナンバープレートと、現在のすべての駐車料金収入*/park->showInfo()が表示されます.
Car car 2("魯B-45678","BMW 320");//乗用車オブジェクトcar 2を作成する.enter(park);//car 2は駐車場に入り、駐車スペースを割り当てます.駐車スペースが空いておりませんので、割り当てることができません
bus.leave(park);//バスは駐車場を出て、駐車料金truckを払う.leave(park);//truckは駐車場を出て、駐車料金を払います
/*現在駐車されている車両のナンバープレートと、現在のすべての駐車料金収入*/park->showInfo()が表示されます.delete park;
return 0; } (2)プログラム実行結果プログラム実行結果プログラム実行結果:駐車スペース数を入力してください:2魯B-12345が駐車場に入り、駐車スペースを割り当てる魯B-23456が駐車場に入り、駐車スペースを割り当てる魯B-12345が駐車場を離れ、駐車料金を払って1元魯B-34567が駐車場に入り、駐車スペースを割り当てる駐車場は現在2台の自動車を駐車しています:魯B-23456、魯B-34567、合計1元の駐車料金は魯B-45678に駐車スペースを割り当てることができません魯B-34567は駐車場を離れて、駐車料金を納めて2元魯B-23456は駐車場を離れて、駐車料金を納めて3元の駐車場は現在0台の自動車を駐車して、共に6元の駐車料金を収めます
ヒント:駐車場の駐車スペースはAutomobileのポインタ配列で表示します.Automobile *spaces; spaces = new Automobile[N]; spaces[i] = &car1; delete[] spaces; 源cpp
#include"Automobile.h"
#include"Park.h"
#include
#include
using namespace std;
int main()
{
	int N=0;
	cout << "        :";
	cin >> N;//        ,    2

	Park park(N);//          

	Car car1(" B-12345", "  A6");  //       
	car1.enter(park);    // car1     ,     
	

	Truck truck(" B-23456", 15);  //       
	truck.enter(park);   // truck     ,    

	car1.leave(park);   // car1     ,     

	Bus bus(" B-34567", 50);  //        
	bus.enter(park);   // bus     ,    

	/*               ,            */
	park.showInfo();

	Car car2(" B-45678", "  320");  //       
	car2.enter(park);
	// car2     ,     。         ,      

	bus.leave(park);  // bus     ,     
	truck.leave(park);  // truck     ,     

	/*               ,            */
	park.showInfo();

	return 0;
}

automobile.h
#include
#include"Park.h"
#include
using namespace std;
#ifndef AUTOMOBILE_H
#define AUTOMOBILE_H
class Park;
class automobile
{
private:
	string number;						//   
	int money;							//   
	int place;							//       
public:
	automobile(string number, int money);//    
	automobile() {};					//      
	int getMoney()
	{
		return money;
	}
	string getNumber()
	{
		return number;
	}
	virtual void pay()=0;				//    
	void enter(Park& park);				//       
	void leave(Park& park);				//       
};
#endif // !AUTOMOBILE_H
class Truck : public automobile				//      
{
private:
	double weight;
public:
	Truck(string number,double weight,int money=3) :		//       
		automobile(number,money), weight(weight) {};
	void pay()
	{
		cout << getNumber()<<weight;
		cout << getMoney();
	}
};
class Car : public automobile								//     
{
private:
	string name;
public:
	Car(string number, string name, int money=1) :			//        
		automobile(number,money), name(name){};
	void pay()
	{
		cout << getNumber() << name;
		cout << getMoney();
	}
};

class Bus : public automobile								//       
{
private:
	int people;
public:
	Bus(string number, int people, int money=2) :			//    
		automobile(number,money), people(people) {};
	void pay()
	{
		cout << getNumber() << people;
		cout << getMoney();
	}
};

automobile.cpp
#include
#include"Park.h"
#include
using namespace std;
class Park;
automobile::automobile(string number, int money)//    
{
	this->number = number;
	this->money = money;
	this->place = 0;							//   0
}
void automobile::enter(Park& park)				//       
{
	for (int i = 0; i < park.N; i++)			//         
		if (park.space[i] == 0)					//       
		{
			park.allCar++;			//        
			park.aut[i] = this;		//   
			park.space[i] = 1;		//       
			place = i;				//       =i
			cout << park.aut[place]->getNumber() << "     ,     " << endl;
			return;
		}
	cout << "   " << this->getNumber() << "    " << endl;
}
void automobile::leave(Park& park)			//     
{
	park.allCar--;
	park.allMoney += money;				//     
	park.space[place] = 0;				//    
	cout << park.aut[place]->getNumber() << "     ,    " << park.aut[place]->getMoney() << " " << endl;
}

Park.h
#include"Automobile.h"
#include
#include
class automobile;
using namespace std;
#ifndef PARK_H
#define PARK_H
class Park
{
private:
public:
	automobile **aut;	//          
	int N;				//    (    )
	int allMoney;		//     
	int allCar;			//        
	bool *space;		//          
	Park(int N);		
	~Park();
	void showInfo();
};
#endif // !PARK_H

Park.cpp
#include"Automobile.h"
#include
#include
class automobile;
Park::Park(int N) :N(N)//    
{
	allMoney = 0;
	allCar = 0;
	aut = new automobile * [N];//       
	space = new bool[N];
	for (int i = 0; i < N; i++)
		space[i] = 0;
}
Park::~Park()
{
	delete[] aut;
	delete[] space;
}
void Park:: showInfo()
{
	cout << "         " << allCar << "  ";
	if (allCar != 0)
	{
		cout << ":";
		for (int i = 0; i < N; i++)
			if (space[i] != 0)
				cout << aut[i]->getNumber() << ",";
	}
	else
		cout << ",";
	cout << "   " << allMoney << "    " << endl;
}

プログラム出力:駐車スペース数を入力してください:2魯B-12345駐車場に入り、駐車スペースを割り当てる魯B-23456駐車場に入り、駐車スペースを割り当てる魯B-12345駐車場を出て、運賃を払って1元魯B-34567駐車場に入り、駐車スペースを割り当てる駐車場は現在2台の車を駐車しています:魯B-34567、魯B-23456、合計収入1元の駐車料金は魯B-45678に駐車スペースを割り当てることができない魯B-34567は駐車場を離れ、運賃2元の魯B-23456は駐車場を離れ、運賃3元の駐車場は現在0台の車を駐車し、合計6元の駐車料金を収入している.