如何解决多态C ++:基本指针字段未使用派生类构造函数提供的值
我遇到了与此代码相关的问题(这是个人项目的简化版本):
#include <iostream>
class Piece
{
public:
Piece() : art('=') {};
char art;
};
class Pawn : public Piece
{
public:
Pawn() : art('p') {};
char art;
};
int main()
{
Piece* piece = new Pawn; // piece->art should be 'p'
std::cout << piece->art; // =
return 0;
}
在我的项目中,我试图拥有一组由不同类型的片段组成的数组,我打算使用Piece*
对象来完成这些任务。但是,当我调用Pawn
(或任何其他派生对象)的构造函数时,似乎好像调用了基本构造函数。
此外,
class Piece
{
public:
Piece() : art('=') {};
char art;
};
class Pawn : public Piece
{
public:
Pawn() : art('p') {};
};
显然是非法的,因为Pawn
没有art
字段,尽管它应该从基类继承它!
有人可以启发我吗?我怎样才能使派生类的构造函数被调用?如何获得Piece
对象的数组(向量),可以是Pawn
或其他派生对象?
解决方法
您需要像这样调用基类构造函数:
class Pawn : public Piece
{
public:
Pawn() : Piece('p') {}
// ^^^^^ not 'art'
};
有关成员初始化程序列表,请参见reference,该列表说明了其工作原理。
如果您有std::vector<Piece*>
,则可以存储指向派生类型的对象的指针,例如Pawn*
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。