C++读书笔记 :多态

  • 虚函数:

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

    很好理解,多看看例子就能掌握了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值