zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

  • 相关阅读:
    最长回文 hdu3068(神代码)
    1297. Palindrome ural1297(后缀数组)
    705. New Distinct Substrings spoj(后缀数组求所有不同子串)
    Milk Patterns poj3261(后缀数组)
    Musical Theme poj1743(后缀数组)
    Conscription poj3723(最大生成树)
    Drying poj3104(二分)
    Finding LCM (最小公倍数)
    002 全局配置信息
    001 开始
  • 原文地址:https://www.cnblogs.com/bizhu/p/2659370.html
Copyright © 2011-2022 走看看