C++ 虚函数

来源:互联网 发布:网络言论自由辩论 编辑:程序博客网 时间:2024/06/06 07:48

虚函数是面向对象程序设计中的一个重要的概念。只能适用于指针和参考的计算机工程运算。当从父类中继承的时候,虚函数和被继承的函数具有相同的签名。但是在运行过程中,运行系统将根据对象的类型,自动地选择适当的具体实现运行。虚函数是面向对象编程实现多态的基本手段。    ——维基百科

当我们使用基类的引用或指针调用基类中定义的一个函数时,我们并不知道该函数真正作用的对象是什么类型,因为它可能是一个基类的对象也可能是一个派生类的对象。如果该函数是虚函数,则直到运行时才会决定到底执行哪个版本,判断的一句是引用或指针所绑定的对象的真实类型。  ——《C++Primer》

也就是说虚函数在用指针或引用调用时  虚函数才有用

比如下面这个 没用到虚函数 可以正确调用  因为我们没有使用指针或者引用

#include <iostream>using namespace std;class A {public:    void show_n()    {        cout << "This is class A" << endl;    }};class B :public A {public:    void show_n()     {        cout << "This is class B" << endl;    }};int main(void){    A a;    B b;    a.show_n();    b.show_n();}
如果用基类指针去调用

#include <iostream>using namespace std;class A {public:void show_n(){cout << "This is class A" << endl;}};class B :public A {public:void show_n() {cout << "This is class B" << endl;}};int main(void){A a;B b;A *pa = &a;pa->show_n();A *pb = &b;pb->show_n();}

上面代码的执行结果  会输出两个  “This is class A"  虽然我们的pb是指向b类的  但是依然调用了A类的 show_n();

用上虚函数  就可以按我们的意愿来了   像下面这样:

#include <iostream>using namespace std;class A {public:virtual void show_n(){cout << "This is class A" << endl;}};class B :public A {public:virtual void show_n() {cout << "This is class B" << endl;}};int main(void){A a;B b;A *pa = &a;pa->show_n();A *pb = &b;pb->show_n();}

输出的结果为 “This is class A"        "This is class B"   


0 0
原创粉丝点击