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 Parentn");
  }

  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 Childrenn");
	}

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

  

C++的虚函数简单介绍

原文链接: https://www.cnblogs.com/bizhu/archive/2012/08/27/2659370.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++的虚函数简单介绍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/60945

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午9:42
下一篇 2023年2月9日 上午9:42

相关推荐