专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅
重载父类的虚函数是很显然的事情,不然,虚函数就变得毫无意义。下面,我们来看一下,如果子类中有虚函数重载了父类的虚函数,会是一个什么样子?假设,我们有下面这样的一个继承关系。 为了让大家看到被继承过后的效果,在这个类的设计中,我只重载了父类的一个函数:f()。那么,对于派生类的实例,其虚函数表会是下面的一个样子: 我们从表中可以看到下面几点, 1)重载的f()函数被放到了虚表中原来父类虚函数的位置。 2)没有被重载的函数依旧。 这样,我们就可以看到对于下面这样的程序, Base *b = new Derive( [阅读全文] [PDF]
下面我们再来看看,如果发生虚函数重载的情况。 下图中,我们重载了父类的f()函数。 下面是对于子类实例中的虚函数表的图: 我们可以看见,三个父类虚函数表中的f()的位置被替换成了子类的函数指针。这样,我们就可以任一静态类型的父类来指向子类,并调用子类的f()了。如: Derive d; Base1 *b1 = &d; Base2 *b2 = &d; Base3 *b3 = &d; b1->f(); //Derive::f() [阅读全文] [PDF]
一起来看代码: usingSystem; classA { publicvoidF(){Console.WriteLine(\"A.F\");} publicvirtualvoidG(){Console.WriteLine(\"A.G\");} }; classB:A { publicvoidF(){Console.WriteLine(\"B.F\");} publicoverridevoidG(){Console.WriteLine(\"B.G\");} }; classTest { staticvoidmain() { Bb=newB(); Aa=b; a. [阅读全文] [PDF]
1 共3条 分1页