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;
}

  

posted @ 2012-08-27 23:19  bizhu  阅读(532)  评论(0编辑  收藏  举报