虚函数

 一, 什么是虚函数(如果不知道虚函数为何物,但有急切的想知道,那你就应该从这里开始)

  简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism)

 

class A{

  public:

  virtual void print(){ cout<<”This is A”<<endl;} //现在成了虚函数了

  };

  class B:public A{

  public:

  void print(){ cout<<”This is B”<<endl;} //这里需要在前面加上关键字virtual吗?

  };

  毫无疑问,class A的成员函数print()已经成了虚函数,那么class B的print()成了虚函数了吗?回答是Yes,我们只需在把基类的成员函数设为virtual,其派生类的相应的函数也会自动变为虚函数。所以,class B的print()也成了虚函数。

int main(){ //main2

  A a;

  B b;

  A* p1=&a;

  A* p2=&b;

  p1->print();

  p2->print();

  }这样输出的结果就是This is A和This is B了。

=======================

   虚函数和非虚函数调用方式有什么不同
    非虚成员函数是静态确定的,换句话说,该成员函数在编译时就会被静态地选择。
    然而,虚成员函数是动态确定的,换句话说,成员函数在运行时才被动态地选择,该选择基于对象的类型,而不是指向该对象的指针或引用的类型。这被称作“动态绑定”。

 

class no_virtual
{
public:
    void fun1() const{}
    int  fun2() const { return a; }
private:
    int a;
}

class one_virtual
{
public:
    virtual void fun1() const{}
    int  fun2() const { return a; }
private:
    int a;
}

class two_virtual
{
public:
    virtual void fun1() const{}
    virtual int  fun2() const { return a; }
private:
    int a;
}

以上三个类中:
no_virtual没有虚函数,sizeof(no_virtual)=4,类no_virtual的长度就是其成员变量整型a的长度;
one_virtual有一个虚函数,sizeof(one_virtual)=8;
two_virtual有两个虚函数,sizeof(two_virtual)=8;

=================

 

计算sizeof(类)   
   空类:1   
   没有虚函数:sizeof(数据成员)的和   
   有虚函数:sizeof(数据成员)的和+sizeof(V表指针)=4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值