c++ 类的指针数组-如何使用类指针数组实现以下的代码??

问题描述

如何使用类指针数组实现以下的代码??

编写一个游戏平台。功能描述:
程序启动后,显示游戏列表(至少有三个游戏)
游戏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()就好,然后还是按我上面说的改就好了。
然后那个基类不一定要是纯虚函数

解决方案二:

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

可以吗

时间: 2024-08-18 14:07:15

c++ 类的指针数组-如何使用类指针数组实现以下的代码??的相关文章

c++-C++类的私有成员中定义了一个数组,怎么在构造函数中初始化这个数组?

问题描述 C++类的私有成员中定义了一个数组,怎么在构造函数中初始化这个数组? 写了这样一个类: class Base{ private: int r[MAX_SIZE]; int length; public: Base() { r[MAX_SIZE] = {1,2,0,5,8,9,7,3,6,4}; //编译的时候在这边出错 length = 10; } void swap_data(int,int); void Show(const Base &ob); friend int Bubble

java数组 代码优化 我能想到的就是下面的代码(未考虑Arrays类)

问题描述 java数组 代码优化 我能想到的就是下面的代码(未考虑Arrays类) // 定义一个函数,接收一个数组与一个要查找的元素,如果该元素存在数组中,那么返回该元素在数组中的索引值,如果不存在返回-1.(不要严格要求使用二分查找法) import java.util.Scanner; class demo2 { public static void main(String[] args){ int[] index=lookfornum(); for (int i=0;i<index.le

c++-C++中字符数组转 string类引用问题

问题描述 C++中字符数组转 string类引用问题 函数定义: void fun(const string &s){ cout<<s<<endl; } 如果调用fun("hello"),可以正确编译.但是如果把函数定义中的const去掉,则不能正确编译. 问字符数组"hello"是通过什么方式装换成const string &类型的,是某种强制转换吗? 我再C++ primer里没找到相关说明,如有知道的说明下哪本书,那页有

定义类的指针变量如何重载类的拷贝构造函数和重载=号

问题描述 定义类的指针变量如何重载类的拷贝构造函数和重载=号 #ifndef LIST_OPRATOR #define LIST_OPRATOR #include using namespace std; class Complex { private: int a; char* p; public: void operator=(Complex* c2); Complex(const Complex* c2); Complex(int a,char* m); ~Complex() { cout

编程-为什么派生类的指针指向基类对象 还可以调用派生类的函数?

问题描述 为什么派生类的指针指向基类对象 还可以调用派生类的函数? 想不明白啊,高手帮帮忙吧 Derived1 * hh = static_cast(new Base); hh->derivedfunction(); // 这里竟然是可以的 为什么呢 hh指向的是一个基类对象啊?? 而且即使derivedfunction里面用到派生类的私有成员也是可以的, 这到底是为什么啊??? 解决方案 虽然语法上让你通过了,static_cast是强制类型转换,所以语法没办法阻止你错误的做法,但是实际运行结

private-两个类互相是对方的成员变量指针

问题描述 两个类互相是对方的成员变量指针 比如有A,B两个类: class A { public: A(); ~A{}; private: B *b; }: class B { public: B(); ~A{}; private: A *a; }: 这代表什么意思,用什么特殊的含义么? 解决方案 这很正常,比如双向链表中相邻的两个节点就互相包含对方的指针. 解决方案二: B类的析构函数写错误了,笔误,不影响我要问的问题 解决方案三: 就是两个结构互相引用,通常用在1:1映射的场景,但也不绝对.

PHP多维数组元素操作类的方法_php实例

我的框架里面一个多维数组元素操作类,主要用于读取数组中配置数据,可以通过字符串节点的方式:a.b.c 来获取和设置元素,以及多维数组的覆盖,有需求的可以参考下吧! <?php /** * Created by PhpStorm. * User: ZHOUZ * Date: 14-5-25 * Time: 下午5:32 */ namespace Snail\Component; /** * 多维数组节点读写 * Class Node * @package Snail\Component */ cl

把无限级分类生成数组_ASP CLASS类

把无限级分类循环出来确实是一件头疼的事情. 比如,我们要循环出一个SELECT,或一个TABLE,要写一大堆判断. 有没好点的办法呢? 我的做法是生成数组,可以重复调用,直接循环数组就行了. 为了方便,我把它写成了类. class.asp 返回所有分类的数组,并按顺序排列 有4个属性: 复制代码 代码如下: set aa=new classlist  aa.id="id"//编号的名称  aa.classname="classname"//分类名称  aa.pid=

这种情况如何解耦?,比如类A有一个变量数组,里面是C类的实现,但C类有一个变量是A类的实例。

问题描述 这种情况如何解耦?,比如类A有一个变量数组,里面是C类的实现,但C类有一个变量是A类的实例.举例.ClassA{C[]children=...........publicvoidLoadC(){children[index]=newC(this);}}classC{C(Aparent){this.parent=parent;}} 大概就是这个样子的.请问这样做是不是很不好?有何办法解决?标题有错字,实例不是现实,csdn这么多年了还是不能编辑标题与内容,真是操蛋. 解决方案 本帖最后由