①在某一个父类中定义了一个虚函数。在子类中给出具体定义。 ②在某一个父类中定义一个函数,但是函数体为空。然后在子类中给出具体定义。 这样2个有区别吗?我觉得没有啊。虽然说,第一个是叫做后绑定,第二个叫做重定义。
我来帮他解答
 
图片
 
 
符号
 
 
编号
 
 
排版
 
 
地图
  您还可以输入9999 个字
您提交的参考资料超过50字,请删除
 
参考资料:
匿名
满意回答
|2011-03-18 11:15
有区别,虚函数的特性是用于实现多态的。 比如以下代码   class A{
public: void print(){ cout<<”This is A”<
print(); p2->print(); } 这样的话 输出就会为两个This is A。因为不管是p1 还是p2的指针类型都是A*,指向的是A类的方法调用(方法不同于对象,是在编译类时编译,会在即使未创建该类对象,依旧可以使用其方法)。 这个时候如果你使用的A中的方法为虚函数,这里结果就完全不同。 被声明为虚函数的函数,会在继承的子类中被覆盖。不同于属性的是,方法为覆盖,属性为隐藏。 具体在c++中的实现是通过一个虚函数表完成的(详细请查阅更多资料,网上很多 )。 这样我们再定义 class A{
public: virtual void print(){ cout<<”This is A”<
print(); p2->print(); } 输出就会是A 和B了
追问
是不是这样的? 1、你讲的道理我是懂了,就像是一个父类为 宠物 ,然后派生出来 狗 这个子类,他们都有一个名字,如果我用重定义的话,狗,就只有狗这个名字了。 但是用虚函数的话,我还可以在适当的时候调出  狗的另外一个名字 宠物。 2、书上说,继承下来的虚函数,子类那个vitural可以要,也可以不要。那样的话,就都是他们的虚函数都只是使用自己的定义了。 3、为什么能够通过指针来调用不同的函数呢?实在不明白。。跪求
回答
2、书上说,继承下来的虚函数,子类那个vitural可以要,也可以不要。那样的话,就都是他们的虚函数都只是使用自己的定义了。 这个子类如果用vitural 关键字,则这个子类的子类的方法也可以被覆盖。 3、为什么能够通过指针来调用不同的函数呢?实在不明白。。跪求 指针是指向一段内存地址,这个内容详细你可以看  文章 你就知道 函数指针是什么时候以何种形式被调用了

参考资料: