C ++ de la entrada a la función virtual competente y la función virtual pura

Función virtual y función virtual pura

concepto

En primer lugar: enfatice un concepto
Definir una función como una función virtual no significa que la función no esté implementada.
Definirlo como una función virtual es permitir que el puntero de la clase base llame a esta función de la subclase.
Definir una función como una función virtual pura significa que la función no se ha implementado.

El propósito de definir una función virtual pura es implementar una interfaz y actuar como una especificación.Los programadores que heredan esta clase de la especificación deben implementar esta función.

Contador normal

Contador normal

class Calculator
{
    
    
public:

	void setv1(int v)
	{
    
    
		this->val1 = v;
	}

	void setv2(int v)
	{
    
    
		this->val2 = v;
	}


	int getResult(string oper)
	{
    
    
		if (oper == "+")
		{
    
    
			return val1 + val2;
		}
		else if (oper == "-")
		{
    
    
			return val1 - val2;
		}
	}
private:
	int val1;
	int val2;

};

void test01()
{
    
    
	Calculator cal;
	cal.setv1(10);
	cal.setv2(10);
	cout << cal.getResult("+") << endl;
	cout << cal.getResult("-") << endl;

}

Calculadora polimórfica

En el desarrollo real, hay un principio de desarrollo que es abierto y cerrado .

  • Abierto a la expansión
  • Cerca de modificación

Código de calculadora polimórfica

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;




//利用多态实现计算器
class abstractCalculator
{
    
    
public:

	//虚函数 virtual int getResult(){ return 0; };

	//纯虚函数
	//如果父类中有了 纯虚函数  子类继承父类,就必须要实现 纯虚函数
	//如果父类中 有了 纯虚函数 ,这个父类 就无法实例化对象了
	//这个类有了纯虚函数,通常又称为 抽象类
	virtual int getResult() = 0;


	void setv1(int v)
	{
    
    
		this->val1 = v;
	}

	void setv2(int v)
	{
    
    
		this->val2 = v;
	}

public:
	int val1;
	int val2;

};

//如果父类中有了 纯虚函数  子类继承父类,就必须要实现 纯虚函数
class A :public abstractCalculator
{
    
    
public:
	virtual int getResult()
	{
    
    
		return 0;
	}
};

//加法计算器
class PlusCalculator :public abstractCalculator
{
    
    
public:
	virtual int getResult()
	{
    
    
		return val1 + val2;
	};
};
class SubCalculator : public abstractCalculator
{
    
    
public:
	virtual int getResult()
	{
    
    
		return val1 - val2;
	};
};
class ChengCalculator :public abstractCalculator
{
    
    
public:
	virtual int getResult()
	{
    
    
		return val1 * val2;
	};

};

void test02()
{
    
    
	abstractCalculator* abc;
	//加法计算器
	abc = new PlusCalculator;

	abc->setv1(10);
	abc->setv2(20);

	cout << abc->getResult() << endl;

	delete abc;

	abc = new SubCalculator;
	abc->setv1(10);
	abc->setv2(20);
	cout << abc->getResult() << endl;

	delete abc;

	abc = new ChengCalculator;
	abc->setv1(10);
	abc->setv2(20);
	cout << abc->getResult() << endl;


	//如果父类有了纯虚函数,不能实例化对象了
	//abstractCalculator aaa;
	//abstractCalculator * abc = new abstractCalculator;

}

int main() {
    
    

	//test01();

	test02();

	system("pause");
	return EXIT_SUCCESS;
}

Entre ellos, virtual int getResult(){ return 0; };es una función virtual, virtual int getResult() = 0;es una función virtual pura.

otro

La diferencia entre función virtual y función virtual pura

Supongo que te gusta

Origin blog.csdn.net/e891377/article/details/108671994
Recomendado
Clasificación