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