①在某一个父类中定义了一个虚函数。在子类中给出具体定义。 ②在某一个父类中定义一个函数,但是函数体为空。然后在子类中给出具体定义。 这样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、为什么能够通过指针来调用不同的函数呢?实在不明白。。跪求 指针是指向一段内存地址,这个内容详细你可以看 文章 你就知道 函数指针是什么时候以何种形式被调用了
参考资料: