C++ 多态性C++;:基指针字段未使用派生类构造函数给定的值
我遇到了这段代码的问题(这是个人项目的简化版本): 显然是非法的,因为C++ 多态性C++;:基指针字段未使用派生类构造函数给定的值,c++,class,pointers,inheritance,polymorphism,C++,Class,Pointers,Inheritance,Polymorphism,我遇到了这段代码的问题(这是个人项目的简化版本): 显然是非法的,因为Pawn没有art字段,尽管它应该从基类继承该字段 有人能启发我吗?如何使派生类的构造函数被调用?如何获取片段对象的数组(向量),这些对象可以是典当,也可以是其他派生对象?您需要像这样调用基类构造函数: class Pawn : public Piece { public: Pawn() : Piece('p') {} // ^^^^^ not 'art' }; 有关成员初始值设定项列表,请参见,
Pawn
没有art
字段,尽管它应该从基类继承该字段
有人能启发我吗?如何使派生类的构造函数被调用?如何获取
片段
对象的数组(向量),这些对象可以是典当
,也可以是其他派生对象?您需要像这样调用基类构造函数:
class Pawn : public Piece
{
public:
Pawn() : Piece('p') {}
// ^^^^^ not 'art'
};
有关成员初始值设定项列表,请参见,其中解释了其工作原理
如果您有一个
std::vector
它可以存储指向派生类型对象的指针,例如Pawn*
为什么Piece
和Pawn
都有自己的art
变量?我不想Piece
有一个art
字段,然而,编译器抱怨说,当我最初尝试诊断这个问题时,它并不存在。当调用基本构造函数(如@cigien instructed)时,编译器允许删除无意义的字段谢谢。编译器现在还允许删除Pawn
(派生)类中的art
字段。如果您从Piece
继承,则Pawn
@finicu中已经有art
成员,两个类中都有art
是允许的,但可能是错误的。您的Pawn
类型将有两个不同的成员,其名称为art
(Pawn::art
和Piece::art
),这两个成员彼此无关,可以具有不同的值。这就是为什么您的第一次尝试被允许编译,以及为什么它看起来像art
没有您期望的值。您正在查看错误的art
成员的值。
class Piece
{
public:
Piece() : art('=') {};
char art;
};
class Pawn : public Piece
{
public:
Pawn() : art('p') {};
};
class Pawn : public Piece
{
public:
Pawn() : Piece('p') {}
// ^^^^^ not 'art'
};