2 zsc2014030403015 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);
}

2个回答

qq_18738333
qq_18738333   2015.06.06 01:33
已采纳

对不起,我逗比了,基类指针指向派生类可以但是不能访问派生类自己的函数。
改的话,派生类不用再virtual了,(有应该也没错),直接void start()就好,然后还是按我上面说的改就好了。
然后那个基类不一定要是纯虚函数

qq_18738333
qq_18738333 回复2014030403015: 当然你也可以不加=0,然后写下基类里面start的实现,也可以的
2 年多之前 回复
qq_18738333
qq_18738333 回复2014030403015: 那个虚函数那样用没什么错,=0表示声明为纯虚函数,基类就成了抽象类
2 年多之前 回复
qq_18738333
qq_18738333 回复2014030403015: 那个基类指针只是存了用new生成的派生类的地址,只是存了个地址,没什么不可以的。
2 年多之前 回复
zsc2014030403015
zsc2014030403015 谢谢了,我想问一下为什么基类可以new一个派生的类呢??还有这个虚函数是这样用吗??感觉我的不像是虚函数??
2 年多之前 回复
qq_18738333
qq_18738333   2015.06.06 01:21

(*games)[i].start(); 改成game[i]->start();

可以吗

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!