虚函数

1、虚函数是c++一个重要特性多态的表现形式(函数重载、运算符重载、模板、虚函数)-》多态的表现形式

 

2、虚函数的定义:
                                  virtual 函数类型 函数名称(参数列表);

                 如果一个函数在基类中被声明为虚函数,则他在所有派生类中都是虚函数

注意点:(1)只有通过基类指针或引用调用虚函数才能引发动态绑定

                 (2)虚函数不能声明为静态

虚函数的动态绑定:

(1)虚函数的动态绑定是通过虚表来实现的。
(2)包含虚函数的类头4个字节存放指向虚表的指针

举例如下:

#include<iostream>

using namespace std;

class Base
{
public:
 virtual void Fun1()
 {
  cout<<"Base::Fun1............."<<endl;
 }
 virtual void Fun2()
 {
  cout<<"Base::Fun2............."<<endl;
 }
 void Fun3()
 {
  cout<<"Base::Fun3............"<<endl;
 }
 Base()
 {
  cout<<"Base::Base().........."<<endl;
 }

 //如果一个类要作为多态基类,要把析构函数定义为虚函数
 virtual ~Base()
 {
  cout<<"Base::~Base..........."<<endl;
 }
};

class DD:public Base
{
public:
 /*virtual */void Fun1()
 {
  cout<<"DD::Fun1............."<<endl;
 }
 /*virtual */void Fun2()
 {
  cout<<"DD::Fun2............."<<endl;
 }
 void Fun3()
 {
  cout<<"DD::Fun3............"<<endl;
 }
 DD()
 {
  cout<<"DD:: DD()..........."<<endl;
 }
 ~DD()
 {
  cout<<"DD:: ~DD()........."<<endl;
 }
};

int main()
{
 /*Base *p;
 DD dd;
 p=&dd;
 p->Fun1(); //Fun1为虚函数,基类指针指向派生类对象,调用的是派生类对象的虚函数
 p->Fun2();
 p->Fun3();//Fun3为非虚函数,调用的是类本身的函数。

 */
 Base *p;
 p=new DD();
 
  p->Fun1();
  delete p;

 return 0;
}

 

///

       如果你打算允许其他人通过基类指针调用对象的析构函数(通过delete这样做是正常的),

并且被析构的对象是有重要的析构函数的派生类的对象,就需要让基类的析构函数作为虚函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值