从 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版本。
我目前正在做一个项目,正在学习 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版本。