add by WJB date 2018/08/30
上一篇讲了封装和继承,这一次讲剩下的一个特性——多态;
多态;不同的对象可以调用相同的方法,但方法的具体实现不同;
多态与继承是密不可分的,多态实质是子类重写父类的虚方法;
这样做的优势是不同的类可以用父类指针表示,可以放入同一个容器内;
在Operation类添加virtual double GetResult() 虚方法,子类根据自己的需要重写;
//头文件
class Operation
{
public:
Operation();
virtual ~Operation();
virtual void SetFirstNum(double param);
virtual void SetSecondNum(double param);
virtual double GetResult();
protected:
double m_firstNum;
double m_SecondNum;
};
//实现
#include "Operation.h"
Operation::Operation():
m_firstNum(0), m_SecondNum(0)
{
}
Operation::~Operation()
{
}
void Operation::SetFirstNum(double param)
{
m_firstNum = param;
}
void Operation::SetSecondNum(double param)
{
m_SecondNum = param;
}
double Operation::GetResult()
{
return 0.0;
}
//main.cpp
#include "stdafx.h"
#include "MyMath.h"
#include "Operation.h"
#include "MyPlusFunc.h"
#include "MyMinusFunc.h"
#include <vector>
std::vector<Operation*> operations;
int main()
{
double result;
result = MyMath::PlusMethod(2, 3);
result = MyMath::MinusMethod(2, 3);
result = MyMath::MultyMethod(2, 3);
result = MyMath::DividMethod(2.0, 3.0);
MyMinusFunc minus;
minus.SetFirstNum(3);
minus.SetSecondNum(2);
result= minus.GetResult();
MyPlusFunc plus;
plus.SetFirstNum(3);
plus.SetSecondNum(2);
result = plus.GetResult();
////////////////////////////////////////////////////////////////
//多态
operations.clear();
Operation * pPlus = new MyPlusFunc();
pPlus->SetFirstNum(10);
pPlus->SetSecondNum(20);
Operation * pMinus = new MyMinusFunc();
pMinus->SetFirstNum(10);
pMinus->SetSecondNum(20);
operations.push_back(pPlus);
operations.push_back(pMinus);
for (int i =0;i<operations.size();i++)
{
result = operations[i]->GetResult();
}
return 0;
}
多态多用在工厂模式下,不确定子类的类型,在项目开发中用处特别大;希望这两篇文章对大家有帮助
源码下载:https://download.youkuaiyun.com/download/wangjianbo09/10636627