C++ 用派生自数组类型的对象填充数组

标签 c++ arrays pointers polymorphism derived-class

在 C++ 中,我有一个指向 Player 对象的指针数组,我想用 Fickle 对象填充它,其中 Fickle 是派生自 Player 的类。这是因为我想要一个通用的 Player 数组,我可以用来自不同类的不同对象填充这些对象,这些对象都派生自 Player 类。

我该怎么做?

我创建了一个指向 Player 对象的指针数组

Player ** playerArray;

然后将数组初始化为一定大小

playerArray = new Player *[numPlayersIn];

但由于某些原因,以下内容不起作用:

playerArray[i] = new Fickle(0);

如何用 Fickle 对象填充 playerArray(Fickel 是从 Player 派生的类)?

谢谢。

更新:

我收到错误消息(在 Eclipse IDE 中):

expected ';' before 'Fickle'

我认为这可能与善变的定义有关。

Fickle.hpp 文件包含:

#pragma once
#include "player.hpp";

class Fickle: public Player {
public:
    // constructor
    Fickle(int initChoice){
        choice = initChoice;
    }
}

这样可以还是有问题?

Player类头文件有:

class Player {
private:

public:
    int getChoice();
int choice; // whether 0 or 1
virtual void receive(int otherChoice); // virtual means it can be overridden in subclases
};

receive 方法将在 Fickle 和其他派生自 Player 类的类中被覆盖

更新 2:

好的,我认为错误实际上是由于代码的不同部分造成的。

播放器定义了一个接收方法:

virtual void receive(int otherChoice);

这应该被 Fickle 的子类覆盖,但是 Fickle 中的定义:

void Fickle::receive(int otherChoice) {}

给出错误:

no 'void Fickle::receive(int)' member function declared in class 'Fickle'

但我不知道这是为什么,因为receive是在Player类中定义的?

最佳答案

虽然您可能应该改用 vector ,但动态分配的数组不能工作并没有真正的原因。这是一些有效的演示代码:

#include <iostream>

class Player {
public:
    virtual void show() { std::cout << "Player\n"; }
};

class Fickle : public Player {
public:
    virtual void show() { std::cout << "Fickle\n"; }
};

int main() {
    Player **p = new Player *[2];
    p[0] = new Player;
    p[1] = new Fickle;

    for (int i=0; i<2; i++)
        p[i]->show();

    for (int i=0; i<2; i++)
        delete p[i];
    delete [] p;
    return 0;
}

关于C++ 用派生自数组类型的对象填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3842979/

相关文章:

c++ - C++中返回指针的函数

c++ - 如何将具有 16 位整数的图像转换为 QPixmap

c++ - 同一命令的多个手册页之间有什么区别?

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?

python - Numpy 列出第二轴

代码在 Windows 中有效,但在 Linux 中无效!为什么? 【简单的指针问题】

c++ - 创建类对象的 vector 时何时调用构造函数?

c++ - 如果值等于键,则合并映射中的条目

ios - 如何根据某些条件 swift 减少数组

C++将函数指针分配给另一个