鱼C论坛

 找回密码
 立即注册
查看: 6043|回复: 4

C++为什么要用基类指针指向子类

[复制链接]
发表于 2012-10-3 21:18:09 | 显示全部楼层 |阅读模式
1鱼币
初学C++有一点不明白
在小甲鱼老师《C++快速入门》中第23讲 虚方法中,为什么要用Pet *cat = new Cat("加菲");Pet *dog = new Dog("欧迪");
我试过用Cat *cat = new Cat("加菲");Dog *dog = new Dog("欧迪");的话,即使不用虚方法也会调用派生类的方法
这样做有什么好处吗

最佳答案

查看完整内容

好处是用Pet指向的指针,实现多态性。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-10-3 21:18:10 | 显示全部楼层
好处是用Pet指向的指针,实现多态性。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-19 20:37:23 | 显示全部楼层

用Pet指向的指针实现多态性和直接Cat *cat=new Cat("加菲")相比有什么优点?还是就是说只是介绍了实现多态的方法?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-19 20:51:31 | 显示全部楼层
好处是当你实现如下函数的时候:
void test( Pet* ppet ) {
  ppet->dosth1();//dosth1是个virtual函数;
  ppet->dosth2();//dosth2是个virtual函数
}
这个函数的作者完全不知道这个函数具体是在干什么,因为dosth1和dosth2的实现完全取决于传进来的类型。
我们称test这样函数很好,因为当你的程序中充满了类似这样的函数后,如果你要增加一种新的Pet的子类型,这些函数完全不用改动。
这就达到了软件工程中,“当需求变更的时候,只增加新代码,不修改已有代码”的理想。(因为增加代码很容易,但修改代码很难,至少要把已有代码看一遍,当已有代码有10万行的时候,没有人希望去看它)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-29 23:13:24 | 显示全部楼层
仰望天上的光 发表于 2013-5-19 20:51
好处是当你实现如下函数的时候:
void test( Pet* ppet ) {
  ppet->dosth1();//dosth1是个virtual函数; ...

好久不见光老师,回贴还是那么一针见血。最近半年都在开发一个自动报表软件,4800行的代码,没有使用类,更新和修改是最头痛的事情。看别人的总结,速度快。 自己亲手做,理解更深刻。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-11 00:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表