zsc2014030403015 于 2015.06.05 11:37 提问
- 如何使用类指针数组实现以下的代码??
-
编写一个游戏平台。功能描述:
程序启动后,显示游戏列表(至少有三个游戏)
游戏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); }
-
- qq_18738333 2015.06.06 01:33
- 已采纳
对不起,我逗比了,基类指针指向派生类可以但是不能访问派生类自己的函数。
改的话,派生类不用再virtual了,(有应该也没错),直接void start()就好,然后还是按我上面说的改就好了。
然后那个基类不一定要是纯虚函数
-
- qq_18738333 回复2014030403015: 当然你也可以不加=0,然后写下基类里面start的实现,也可以的
- 接近 3 年之前 回复
-
- qq_18738333 回复2014030403015: 那个虚函数那样用没什么错,=0表示声明为纯虚函数,基类就成了抽象类
- 接近 3 年之前 回复
-
- qq_18738333 回复2014030403015: 那个基类指针只是存了用new生成的派生类的地址,只是存了个地址,没什么不可以的。
- 接近 3 年之前 回复
-
- zsc2014030403015 谢谢了,我想问一下为什么基类可以new一个派生的类呢??还有这个虚函数是这样用吗??感觉我的不像是虚函数??
- 接近 3 年之前 回复
-
- qq_18738333 2015.06.06 01:21
(*games)[i].start(); 改成game[i]->start();
可以吗
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!