一个例子告诉你什么是封装,继承和多态(C++ 代码实例) (二)

本文接着上一篇关于封装和继承的内容,介绍面向对象的多态特性。多态指不同对象调用相同方法但实现不同,实质是子类重写父类虚方法,其优势是不同类可用父类指针表示并放入同一容器。文中给出代码示例,还提到多态在工厂模式和项目开发中用处大。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值