C++的纯虚函数和虚函数

目录

 

虚函数

纯虚函数

抽象类

实例参考代码


  • 虚函数

    virtual int func()
    {
        //do something;
        return 0;
    }
  • 纯虚函数

    virtual int func() = 0;

 

  • 抽象类

    class virt_class
    {
    public:
        virtual int func() = 0;
        ...
    }
  1. 不可以实例化对象;
  2. 类中含有纯虚函数;
  3. 如果有子类继承的父类为抽象类,则子类必须重写父类的纯虚函数;
  • 实例参考代码

    #include <iostream>
    using namespace std;
    
    class calculator
    {
    
    public:
    	void setv1(int v1)
    	{
    		this->val1 = v1;
    	}
    
    	void setv2(int v2)
    	{
    		this->val2 = v2;
    	}
    
    	int getres(string oper)
    	{
    	
    		if ("+" == oper)
    		{
    			return val1 + val2;
    		}
    		else if ("-" == oper)
    		{
    			return val1 - val2;
    		}
    		else if ("*" == oper)
    		{
    			return val1 * val2;
    		}
    		else if ("/" == oper)
    		{
    			return val1 / val2;
    		}
    	}
    
    private:
    	int val1;
    	int val2;
    };
    
    //多态的实现
    
    class abstractclac
    {
    public:
    
    	//虚函数 virtual int getres() { return 0; };
    	//纯虚函数
    	//如果子类继承的父类有纯虚函数,则子类必须实现改纯虚函数
    	//如果类中有纯虚函数,则这个类无法实例化这个类的对象
    	//这个类成为抽象类
    	virtual int getres() = 0;
    
    	void setv1(int v1)
    	{
    		this->val1 = v1;
    	}
    	void setv2(int v2)
    	{
    		this->val2 = v2;
    	}
    
    	int getv1()
    	{
    		return val1;
    	}
    	int getv2()
    	{
    		return val2;
    	}
    
    private:
    	int val1;
    	int val2;
    };
    
    //加法的实现
    
    class add :public abstractclac
    {
    public:
    	int getres()
    	{
    		return getv1() + getv2();
    	}
    };
    
    class subtract : public abstractclac
    {
    public:
    	int getres()
    	{
    		return getv1() - getv2();
    	}
    	
    };
    
    class mut : public abstractclac
    {
    public:
    	int getres()
    	{
    		return getv1() * getv2();
    	}
    };
    
    
    void  test()
    {
    	abstractclac *calc1 = new add;
    	abstractclac *calc2 = new mut;
    	calc1->setv1(10);
    	calc1->setv2(20);
    	calc2->setv1(30);
    	calc2->setv2(40);
    	cout << calc1->getres() << endl;
    	cout << calc2->getres() << endl;
    }
    
    int main()
    {
    	test();
    	system("pause");
    	return 0;
    }

猜你喜欢

转载自blog.csdn.net/qq_44045338/article/details/106560723
今日推荐