Répertoire d'articles
Fonction virtuelle et fonction virtuelle pure
concept
Tout d'abord: insister sur un concept
Définir une fonction comme une fonction virtuelle ne signifie pas que la fonction n'est pas implémentée.
La définir comme une fonction virtuelle revient à permettre au pointeur de la classe de base d'appeler cette fonction de la sous-classe.
Définir une fonction comme une fonction virtuelle pure signifie que la fonction n'a pas été implémentée.
Le but de la définition d'une fonction virtuelle pure est d'implémenter une interface et d'agir comme une spécification.Les programmeurs qui héritent de cette classe de la spécification doivent implémenter cette fonction.
Compteur ordinaire
Compteur ordinaire
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;
}
Calculatrice polymorphe
Dans le développement réel, il y a un principe de développement ouvert et fermé .
- Ouvert à l'expansion
- Proche de la modification
Code de calcul polymorphe
#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;
}
Parmi eux, virtual int getResult(){ return 0; };
est une fonction virtuelle, virtual int getResult() = 0;
est une fonction virtuelle pure.
autre
La différence entre la fonction virtuelle et la fonction virtuelle pure