从 parent object c++ 访问 child 方法

Access child method from parent object c++

我目前正在做一个项目,正在学习 C++ 中的继承。 然而我遇到了一个问题,我不知道如何解决。

我会给出一个示例代码,因为真正的代码是西班牙语,所以很难理解。

在musicalsymbol.h中:

class MusicalSymbol {
public:
    MusicalSymbol();
    virtual ~MusicalSymbol();

    virtual qreal getX();
private:
    ...
};

musicalsymbol.cpp

MusicalSymbol::MusicalSymbol() {}
MusicalSymbol::~MusicalSymbol() {}

qreal MusicalSymbol::getX() {
    return -1;
}

现在我有一个 child class:

note.h

class Note : public MusicalSymbol{
public:
    Note();
    ~Note();
    qreal getX() override;
private:
    qreal x;

note.cpp

Note::Note() {}
Note::~Note() {}

qreal Note::getX() {
    return this->x;
}

现在我有另一个 class,我有一个 MusicalNote

向量
std::vector < MusicalSymbol > tab_score;

我将 class 注释(和其他 child classes)的元素附加到带有 push_back() 的向量,但稍后当我尝试访问一个class 的元素像这样:

tab_score[i].getX();

当我想从注释 class 中得到 x 时,我总是得到 -1 作为输出。获得正确值的最佳方法是什么。 也可以在 parent class 中创建一个 x 值并从 child class?

修改它

编辑:感谢您提供有关切片的信息,现在我知道为什么不起作用,但我仍然不知道如何解决它。

感谢大家,如果有什么不清楚的地方,请告诉我。

问题是您正在存储 MusicalSymbol 个对象。如果你想使用多态性,你应该创建一个 MusicalSymbol * 指针的向量。

然后你tab_score[i]->getX()

如果保留 MusicalSymbol 个对象的矢量,每次尝试向矢量添加子对象时,您实际上是在创建一个从子对象复制其成员的父对象,丢失子对象独有的成员。 那么tab_score[i]不是子对象而是父对象,所以当你调用tab_score[i].getX()时你调用的是父class版本。