虚函数与纯虚函数
概念
首先:强调一个概念
定义一个函数为虚函数,不代表函数为不被实现的函数。
定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。
定义一个函数为纯虚函数,才代表函数没有被实现。
定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。
普通计数器
普通计数器
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;
}
多态计算器
真正的开发中,有个开发原则开闭原则。
- 对扩展开放
- 对修改关闭
多态计算器代码
#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;
}
其中,virtual int getResult(){ return 0; };
是虚函数,virtual int getResult() = 0;
是纯虚函数。