class Book {
public:
    string title;
    int ID;
    virtual void S () = 0;
};

class Narnia : public Book {
public:
    int NarniaParts;
    virtual void S () {}
};

class HP : public Book {
public:
    int HPparts;
    virtual void S () {}
};

int main ()
{
    Book * s = new Narnia;
    s->   //THIS IS WHERE THE PROBLEM IS




    return 0;
}


因此,我用一本超类Book和两个子类Narnia和HP编写了这一小段代码。当我做

Book * s = new Narnia;


我的“ s->”无法访问Narnia类“ NarniaParts”的成员函数。它可以访问超类Book的所有成员(标题,ID和S),但不能访问Narnia类的对象的NarniaParts成员。有人可以解释一下为什么我s->无法访问NarniaParts吗?谢谢!

最佳答案

这是因为直到运行时编译器才知道sNarnia,因此除非您明确告诉s,否则它不会让您在编译时将Narnia视为s >是Narnia(广播)



您正在向后进行多态。

您似乎想要做的是在您的BookParts类中创建一个名为Book的虚拟方法,并使每个派生类重写BookParts方法,而不是使用自己的方法。

10-04 23:33