多态性是面向对象程序设计中的一个重要特征,利用多态性可以设计和实现一个易于拓展的系统。在C++语言中,多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数,发出同样的消息被不同类型的对象接收时,导致完全不同的行为。
多态性通过联编实现。联编是指一个计算机程序自身彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。在C++中,根据联编的时刻不同,存在两种类型的多态性,即函数重载和虚函数。
虚函数:
在类的继承层次结构中,在不同的层次中可以出现名字、参数个数和类型都相同而功能不同的函数。编译器按照先自己后父类的顺序进行查找覆盖,如果子类有父类相同原型的成员函数时,要想调用父类的成员函数,需要对父类重新引用调用。虚函数则可以解决子类和父类相同原型成员函数的函数调用问题。虚函数允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。
在基类中用virtual声明成员函数为虚函数,在派生类中重新定义此函数,改变该函数的功能。
#include<iostream>
using namespace std;
class CEmplyee
{
public:
int m_ID;
char m_Name[128];
char m_Depart[128];
CEmplyee ()
{
memset(m_Name,0,sizeof(char)*128);//memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法
memset(m_Depart,0,sizeof(char)*128);
}
virtual void OutputName()//定义了一个虚成员函数
{
cout<<"员工姓名"<<m_Name<<endl;
}
};
class COperator :public CEmplyee
{
public:
char m_Password[128];
COperator()
{
strcpy(m_Name,"Mg");
}
void OutputName()//与虚函数的名字相同
{
cout<<"操作员姓名"<<m_Name<<endl;
}
};
void main()
{
CEmplyee *pWorker =new COperator();//定义一个CEmplyee类,调用COperator类构造函数
pWorker->OutputName();
delete pWorker;
}