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'
};