(高分)简单的虚函数问题
<p>(高分)简单的虚函数问题</p><p><img src="http://img.baidu.com/img/iknow/icn_point.gif"> 悬赏分:80 -</p>
<p>解决时间:2010-3-17 15:49</p>
<p>#include <stdio.h></p>
<p>class a</p>
<p>{</p>
<p>public:</p>
<p>virtual void show()</p>
<p>{</p>
<p>printf("this a show\n");</p>
<p>}</p>
<p>};</p>
<p>class b:public a</p>
<p>{</p>
<p>public:</p>
<p>void show()</p>
<p>{</p>
<p>printf("this b show\n");</p>
<p>}</p>
<p>};</p>
<p>class c:public a</p>
<p>{</p>
<p>public:</p>
<p>void show()</p>
<p>{</p>
<p>printf("this c show\n");</p>
<p>}</p>
<p>};</p>
<p>void main()</p>
<p>{</p>
<p>b cb;</p>
<p>c cc;</p>
<p>cb.show();</p>
<p>cc.show();</p>
<p>}</p>
<p>在基类a中声明show为虚函数,但是去掉virtual后,输出的结果也是一样的,那么,加了和不加,似乎没什么分别吧?</p>
<p>不加的话,不就是函数的重定义吗?虚函数还要匹配参数和返回类型,不是比函数的重定义要复杂?</p>
<p>为什么还要加上虚函数?</p>
<p>谢谢!!!</p>
<p>提问者: goodczs - 六级</p>
<p>最佳答案</p>
<p>#include <stdio.h></p>
<p>class A</p>
<p>{</p>
<p>public:</p>
<p>virtual void show()</p>
<p>{</p>
<p>printf("this a show\n");</p>
<p>}</p>
<p>};</p>
<p>class B:public A</p>
<p>{</p>
<p>public:</p>
<p>virtual void show()</p>
<p>{</p>
<p>printf("this b show\n");</p>
<p>}</p>
<p>};</p>
<p>class C:public A</p>
<p>{</p>
<p>public:</p>
<p>virtual void show()</p>
<p>{</p>
<p>printf("this c show\n");</p>
<p>}</p>
<p>};</p>
<p>void main()</p>
<p>{</p>
<p>A aa;</p>
<p>B bb;</p>
<p>C cc;</p>
<p>A* p = {&aa,&bb,&cc};</p>
<p>for (int i=0; i<3; i++)</p>
<p>{</p>
<p>p->show();</p>
<p>}</p>
<p>}</p>
<p>你试一下这个程序 你就明白了虚函数的作用</p>
<p>他们都转化成了A*指针,但是调用它们的show方法时,却调用个各自的show方法</p>
<p>PS:你做的那个转化是对象的转,里面的函数也会发生变化</p>
<p>0</p>
<p>回答者:</p>
<p>xiaoduo170 - 六级 2010-3-17 15:33</p>
<p>我来评论>></p>
页:
[1]