-
虚函数:
C++的多态性:函数重载和虚函数
基类中用virtual声明成员函数为虚函数
重装是同一层次函数名相同,覆盖是继承层次上成员函数的函数原型相同
-
虚继承
-
抽象类
包含纯虚函数的类称为抽象类。
抽象类--------->只能作为基类派生出来的新的子类。
-
纯虚函数(Pure Virtual Function)
不具备函数的功能
纯虚函数不能被继承。
-
然后就是简单的demo,理解其原理。
#include<iostream> using namespace std; const double PI=3.14; class CFigure { public : virtual double getArea()=0; }; class CCircle :public CFigure { private : double m_dRadius; public: CCircle(double dR){ m_dRadius=dR; } double getArea() { return m_dRadius*m_dRadius*PI; } }; class CRectangle :public CFigure { protected: double m_dHeight,m_dWidth; public: CRectangle(double dHeight,double dWidth) { m_dHeight=dHeight; m_dWidth=dWidth; } double getArea() { return m_dHeight*m_dWidth; } }; int main(int argc,char *argv[]) { CFigure *fg1; fg1=new CRectangle(4,5); cout <<fg1->getArea()<<endl; delete fg1; CFigure *fg2; fg2= new CCircle(4.0); cout <<fg2->getArea()<<endl; delete fg2; return 0; }
派生于图像类CFigure。每个图像的计算方法不确定,因此,将计算方法设置为纯虚函数,这样后面的每个派生类都有了自己的计算面积的方法。
-抽象类常用于作为其他类的父类
demo:实现抽象类中的成员函数
#include<iostream> #include<string.h> using namespace std; class CEmployee { public: int m_ID; char m_Name[128]; char m_Depart[128]; virtual void OutputName()=0; }; class COperator : public CEmployee { public : char m_Password[128]; void OutputName() { cout <<"操作员姓名:"<<m_Name<<endl; } COperator() { strcpy(m_Name,"MR"); } }; class CSystemManger:public CEmployee { public: char m_Password[128]; void OutputName() { cout << "系统管理员"<<m_Name<<endl; } CSystemManger() { strcpy(m_Name,"SK"); } }; int main(int argc,char * argv[]) { CEmployee *pWorker; pWorker=new COperator(); pWorker->OutputName(); delete pWorker; pWorker = NULL; pWorker=new CSystemManger(); pWorker->OutputName(); delete pWorker; pWorker =NULL; return 0; }
很好理解,多看看例子就能掌握了。