首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >分配同一类时上层类和继承类指向的差异

分配同一类时上层类和继承类指向的差异
EN

Stack Overflow用户
提问于 2014-01-02 08:47:19
回答 4查看 352关注 0票数 0

当我亲自学习C++时,我怀疑是否为类分配指针。例如:

代码语言:javascript
复制
 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是类,PrintRender的子类。但是,正如您在第46行中所看到的,上类点子类,它的工作没有错误。

因此,我还尝试指向Print类,并在第52行调用draw函数。它的工作没有错误。

我不知道这两者有什么区别,以及为什么在没有错误或警告的情况下工作。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-02 08:54:30

如果实例化继承的类,那么它的基对象也会被实例化。这是多态。我认为你应该通读虚函数C++常见问题

票数 1
EN

Stack Overflow用户

发布于 2014-01-02 08:58:34

可以将父类引用到子类的对象。使用此引用,您只能调用父类知道的函数,即仅调用父类中存在的方法。

通过使用父类的引用,该引用也可以引用任何其他子类对象。

票数 1
EN

Stack Overflow用户

发布于 2014-01-02 09:02:06

它可以工作,因为PrintRender的子类,Liskov代换原理保存。

renderer->draw(window)有效地调用了Print::draw,因为Render::draw是一个虚拟函数。如果它没有被声明为virtual,那么Render::draw就会被调用。

区别在于,即使renderer指向Print,也不能将renderer存储在Print中。另一个不同之处是Print可能隐藏Render的方法。隐藏方法在a中不像在renderer中那样容易访问。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20879244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档