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吗?谢谢!
最佳答案
这是因为直到运行时编译器才知道s
是Narnia
,因此除非您明确告诉s
,否则它不会让您在编译时将Narnia
视为s
>是Narnia
(广播)
您正在向后进行多态。
您似乎想要做的是在您的BookParts
类中创建一个名为Book
的虚拟方法,并使每个派生类重写BookParts
方法,而不是使用自己的方法。