C++的虚函数简单介绍

//C++中的虚函数的作用主要是实现了多态的机制。关于多态,
//简而言之就是用父类型别的指针指向其子类的实例,
//然后通过父类的指针调用实际子类的成员函数
 
 
//每个类都维护着一张虚函数表,
//调用虚函数时查看对象是那个类,然后查表
 
//基类可以使用为纯虚函数(virtual void print()=0),
//基类就是抽象类,要求子类实现
 
//重载(overload)
//1.相同作用域(同类)
//2.函数名相同
//3.参数不同(参数类型,个数,顺序)
//4.virtual关键字可有可无
//
//覆盖(重写override)
//1.位于不同作用域(父子类)
//2.函数名称相同
//3.参数也相同
//4.virtual必须有
//
//隐藏
//1.位于不同作用域(父子类)
//2.函数名称相同
//3.参数个数不同
//4.virtual关键字可有可无
//-------------------------
//1.位于不同作用域
//2.名称相同
//3.参数相同
//4.父类指针指向子类变量,隐藏子类方法
//5.方法是虚函数
 
#include "stdafx.h"
#include<iostream>
using  namespace  std;
 
class  ParClass
{
public :
   void   print_Fun()
   {
       cout <<  "I am parent,I am not virtual"  << endl;
   }
   virtual  void  print()
   {
       printf( "I am Parent\n" );
   }
 
   void  print( int  i)  //重载overload
   {
       cout <<  "父类重载..."  << endl;
   }
 
   virtual  ~ParClass()
   {
       //基类最好使用virtual,这样的话父类指针指向子类时,
       //释放内存时才能调用子类虚析构函数,否则只能调用父类析构函数
       cout <<  "父类析构函数..."  << endl;
   }
 
};
 
class  ChilClass: public  ParClass
{
public :
     void  print_Fun()  //重定义(隐藏) //决定于对象的类型
     {
        cout <<  "I am ChilClass,I am not virtual"  <<endl;
     }
     virtual  void  print()  //覆盖(重写) override
     {
         printf( "I am Children\n" );
     }
 
      ~ChilClass()  //为virtual
     {
        cout <<  "ChilClass 析构函数..."  << endl;
     }
 
};
 
class  ChilClass_1:  public  ParClass
{
public :
     void  print()
     {
         cout <<  "ChilClass_1 print"  << endl;
     }
 
     ~ChilClass_1()
     {
         cout <<  "ChilClass_1 析构函数"  << endl;
     }
};
 
 
int  _tmain( int  argc, _TCHAR* argv[])
{
     ParClass *par =  new  ChilClass_1;
     par->print();
     par->print_Fun();
     par->print(2);
     delete par;
     return  0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值