C++中的虚函数和虚函数表(4)

7.在基类中调用继承类的函数(如果此函数是虚函数才能如此)还是先看例子: class A { public: virtual void fun() { cout << "A::fun" << endl; } void show() { fun(); } }; class B : public A { public: virtual void fun() { cout << "B::fun" << endl; } }; int main() { A a; a.show(); return 0; }打印结果:A::fun

    在6中的例子中,test(A *a)其实有一个继承类指针向基类指针隐式转化的过程。可以看出利用虚函数我们可以在基类调用继承类函数。但如果不是虚函数,继承类指针转化为基类指针后只可以调用基类函数。反之,如果基类指针向继承类指针转化的情况怎样,这只能进行显示转化,转化后的继承类指针可以调用基类和继承类指针。如下例子: class A { public: void fun() { cout << "A::fun" << endl; } }; class B : public A { public: void fun() { cout << "B::fun" << endl; } void fun0() { cout << "B::fun0" << endl; } }; int main() { A *a=new A; B *b=new B; A *pa; B *pb; pb=static_cast<B *>(a); //基类指针向继承类指针进行显示转化 pb->fun0(); pb->fun(); return 0; }C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没有详细的说明,没有比较,没有举一反三。不利于学习和阅读,所以这是我想写下这篇文章的原因。也希望大家多给我提意见。

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwsjdx.html