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