当我亲自学习C++时,我怀疑是否为类分配指针。例如:
43 int main () {
44 View *window = new View ("window");
45 Render *renderer; // why Render(upper class) points subclass and it works?
46 renderer = new Print;
47 renderer->draw (window); // this renderer works like Print function. why?
48
49 //what are the difference between up and down?
50 Print *a;
51 a = new Print;
52 a->draw (window);
53 return 0;
54 }关于您的信息,Render是类,Print是Render的子类。但是,正如您在第46行中所看到的,上类点子类,它的工作没有错误。
因此,我还尝试指向Print类,并在第52行调用draw函数。它的工作没有错误。
我不知道这两者有什么区别,以及为什么在没有错误或警告的情况下工作。
发布于 2014-01-02 08:54:30
如果实例化继承的类,那么它的基对象也会被实例化。这是多态。我认为你应该通读虚函数C++常见问题。
发布于 2014-01-02 08:58:34
可以将父类引用到子类的对象。使用此引用,您只能调用父类知道的函数,即仅调用父类中存在的方法。
通过使用父类的引用,该引用也可以引用任何其他子类对象。
发布于 2014-01-02 09:02:06
它可以工作,因为Print是Render的子类,Liskov代换原理保存。
renderer->draw(window)有效地调用了Print::draw,因为Render::draw是一个虚拟函数。如果它没有被声明为virtual,那么Render::draw就会被调用。
区别在于,即使renderer指向Print,也不能将renderer存储在Print中。另一个不同之处是Print可能隐藏Render的方法。隐藏方法在a中不像在renderer中那样容易访问。
https://stackoverflow.com/questions/20879244
复制相似问题