请仔细观看题目
这个不是什么所谓的作业贴:
先看题目:
写一个程序,定义抽象基类CRole(角色),由它派生出3个派生类: CPlane(飞机类)、CTank(坦克类)、子弹类(CBullet),用一个函数printInfo分别把三者的图像绘制到屏幕上(用Cout分别输出其类名+对象名即可,对象名在各自构造函数中设置)。将printInfo定义为CRole中的一个虚函数,然后创建一个数组,该数组中要包括3架飞机、2部坦克,10颗子弹,在main函数最后用printInfo输出所有的对象信息。
我做的答案:
[code=c]
#include <iostream>
using namespace std;
class CRole
{
    char *role;
public:
    CRole()
    {
        role=new char[10];
        role="CRole 基类";
    }
    virtual void PrintInfo()
    {
        cout<<role<<endl;
    }
};
class CPlane:public CRole
{
    char *plane;
public:
    CPlane()
    {
        plane=new char[10];
        plane="CPlane 飞机";
    }
    void PrintInfo()
    {
        cout<<plane<<endl;
    }
};
class CTank:public CRole
{
    char *tank;
public:
     CTank()
    {
        tank=new char[10];
        tank="CTank 坦克";
    }
    void PrintInfo()
    {
        cout<<tank<<endl;
    }
};
class CBullet:public CRole
{
    char *bullet;
public:
     CBullet()
    {
        bullet=new char[10];
        bullet="CBullet 子弹";
    }
    void PrintInfo()
    {
        cout<<bullet<<endl;
    }
};
void main()
{
    CPlane p;
    CTank t;
    CBullet b;
    //p.PrintInfo();
    //t.PrintInfo();
    //b.PrintInfo();
    
    CRole* r[15];
    for (int i=0; i<15;i++)
    {
        if(i<=2)
        {
            r[i]=&p;
            r[i]->PrintInfo();
        }
        else if(i>2&&i<=4)
        {
            r[i]=&t;
            r[i]->PrintInfo();
        }
        else
        {
            r[i]=&b;
            r[i]->PrintInfo();
        }
    }
}
[/code]
可是这样输出的结果是:
CPlane 飞机
CPlane 飞机
CPlane 飞机
CTank 坦克
CTank 坦克
CBullet 子弹
CBullet 子弹
CBullet 子弹
CBullet 子弹
CBullet 子弹
CBullet 子弹
CBullet 子弹
CBullet 子弹
CBullet 子弹
CBullet 子弹
这个仅仅是输出三个相同的对象。如果要输出的是15个对象,而且每次输出在后面都有相应的编号,要怎么修改代码呢?
假定输出的结果是:
CPlane 飞机0
CPlane 飞机1
CPlane 飞机2
CTank 坦克0
CTank 坦克1
CBullet 子弹0
CBullet 子弹1
CBullet 子弹2
CBullet 子弹3
CBullet 子弹4
CBullet 子弹5
CBullet 子弹6
CBullet 子弹7
CBullet 子弹8
CBullet 子弹9