編寫一個游戲平台。功能描述:
程序啟動後,顯示游戲列表(至少有三個游戲)
游戲1
游戲2
游戲3
用戶選擇其中一個游戲後,進入該游戲。游戲結束後,回到游戲列表。游戲列表按照游戲訪問量動態排序。
定義游戲1類、游戲2、游戲3類,公有繼承自CGame。游戲類自行設計,必須提供void start()作為游戲入口。
上面的要求如何實現???
#include<iostream>
#include<algorithm>
using namespace std;
class Game
{
private:
char* name;
int visitCount;
public:
Game()
{
visitCount = 0;
}
int GetVisitCount()
{
return visitCount;
}
void addvisitCount();
void ShowName();
virtual void start() = 0;
};
void Game::ShowName()
{
cout << name << endl;
}
class GGame1:public Game
{
private:
public:
virtual void start();
};
void GGame1::start()
{
cout << "歡迎進入游戲" << endl;
}
class GGame2:public Game
{
private:
public:
virtual void start();
};
void GGame2::start()
{
cout << "歡迎進入游戲" << endl;
}
class GGame3:public Game
{
private:
public:
virtual void start();
};
void GGame3::start()
{
cout << "歡迎進入游戲" << endl;
}
bool cmp(Game& a,Game& b)
{
return a.GetVisitCount() > b.GetVisitCount();
}
void menu(Game& gaems) // 顯示游戲列表
{
for (int i = 0; i < 3; i++) (gaems).ShowName();
}
int main()
{
Game *games[3];
games[0] = new GGame1;//為什麼可以用基類指針數組來new一個派生類??
games[1] = new GGame2;
games[2] = new GGame3;
do
{
/*sort(games,games+3,cmp); 將游戲列表按訪問量排序*/
//如何實現類指針數組的排序??
menu(games);
int choice;
cin >> choice;
// 用戶輸入選擇
if (choice >= 0 && choice <= 2)
{
int i = choice;
(*games)[i].start();
}
else
{
break; // 退出系統
}
} while (true);
}
對不起,我逗比了,基類指針指向派生類可以但是不能訪問派生類自己的函數。
改的話,派生類不用再virtual了,(有應該也沒錯),直接void start()就好,然後還是按我上面說的改就好了。
然後那個基類不一定要是純虛函數