码迷,mamicode.com
首页 > 编程语言 > 详细

c++ --> 虚函数

时间:2015-06-24 22:28:48      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

虚函数

#include <iostream>
#include <string>
using namespace std;

class Base
{
    public:
        virtual void print_val()
        {
            cout << "base" << endl;
        }
};
class Derived : public Base
{
    public:
        void print_val()
        {
            cout << "Derived" << endl;
        }
};

int main()
{
    Derived d;
    Base ob(d);
    Base *pb = &d;
    Base &yb = d;
    ob.print_val();
    pb->print_val();
    yb.print_val();
}

运行结果:

base
Derived
Derived

现象

程序用了三种方式来测试虚函数的调用:基类对象、基类指针、基类引用。由结果可以看出,当用引用、指针调用虚函数是调用的是派生类的实际函数,而不是基类的虚函数。

结论

  • 当通过基类的对象直接调用虚函数时,总是调用该对象所属的函数。所以ob是基类的对象,调用的是基类的实例
  • 当使用指向基类的指针或引用调用时,将动态绑定虚函数,即调用该指针或引用所指的类型定义的函数。pb是指向基类对象的指针,但是实际指向的是派生类对象,所以调用派生类的实例

对比

#include <iostream>
#include <string>
using namespace std;

class Base
{
    public:
        void print_val()
        {
            cout << "base" << endl;
        }
};
class Derived : public Base
{
    public:
        void print_val()
        {
            cout << "Derived" << endl;
        }
};

int main()
{
    Derived d;
    Base ob(d);
    Base *pb = &d;
    Base &yb = d;
    ob.print_val();
    pb->print_val();
    yb.print_val();
}

结果:

base
base
base

总结

定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数
语法:virtual 函数返回类型 函数名(参数表) {函数体;}
用途:实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数

 

c++ --> 虚函数

标签:

原文地址:http://www.cnblogs.com/jeakeven/p/4598731.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!