zoukankan      html  css  js  c++  java
  • C++ 动态多态

    多态

    #include <iostream>
    using namespace std;
    #include <string>
    
    //多态
    
    //动物类
    class Animal 
    {
    public:
        //虚函数
        virtual void speak()
        {
            cout << "动物在说话" << endl;
        }
    };
    
    //猫类
    class Cat : public Animal
    {
    public:
        //重写  函数返回值类型  函数名  参数列表  完全相同
        void speak()
        {
            cout << "小猫在说话" << endl;
        }
    };
    
    //狗类
    class Dog : public Animal
    {
    public:
        
         void speak()
        {
            cout << "小狗在说话" << endl;
        }
    };
    
    //执行说话的函数
    //地址早绑定 在编译阶段确定函数地址
    //如果想执行让猫说话,那么这个函数地址就不能提前绑定,需要在运行阶段进行绑定,地址晚绑定
    
    
    //动态多态满足条件
    //1、有继承关系
    //2、子类重写父类中的虚函数
    
    
    //动态多态使用
    //父类的指针或者引用  执行子类对象
    
    
    void doSpeak(Animal& animal)//Animal & animal = cat;
    {
        animal.speak();
    }
    
    void test01()
    {
        Cat cat;
        doSpeak(cat);
    
        Dog dog;
        doSpeak(dog);
    
    }
    
    int main()
    {
        test01();
        //test02();
        
        system("pause");
        return 0;
    
    }

     多态案例

    #include <iostream>
    using namespace std;
    #include <string>
    
    //多态案例
    
    //分别利用普通写法和多态技术实现计算器
    
    //普通写法
    
    class Calculator
    {
    public:
    
        int getResult(string oper)
        {
            if (oper == "+")
            {
                return m_Num1 + m_Num2;
            }
            else if (oper == "-")
            {
                return m_Num1 - m_Num2;
            }
            else if (oper == "*")
            {
                return m_Num1 * m_Num2;
            }
            //如果想扩展新的功能,需求修改密码
            //在真实开发中,提倡开闭原则     开闭原则:对扩展进行开发,对修改进行关闭
        }
    
    
        int m_Num1;//操作数1
        int m_Num2;//操作数2
    
    };
    
    void test01()
    {
        //创建计算器对象
        Calculator c;
        c.m_Num1 = 10;
        c.m_Num2 = 10;
    
        cout << c.m_Num1 << "+" << c.m_Num2 << "=" << c.getResult("+") << endl;
    
        cout << c.m_Num1 << "-" << c.m_Num2 << "=" << c.getResult("-") << endl;
    
        cout << c.m_Num1 << "*" << c.m_Num2 << "=" << c.getResult("*") << endl;
    }
    
    
    
    //利用多态实现计算器
    //1、组织结构清晰
    //2、可读性强
    //3、对于前期和后期扩展以及维护性高
    //实现计算器抽象类
    class AbstractCalculator
    {
    public:
    
        virtual int getResult()
        {
            return 0;
        }
    
        int m_Num1;
        int m_Num2;
    };
    
    //加法计算器类
    
    class AddCalculator :public AbstractCalculator
    {
    public:
        int getResult()
        {
            return m_Num1 + m_Num2;
        }
    };
    
    //减法计算器类
    class SubCalculator : public AbstractCalculator
    {
    public:
        int getResult()
        {
            return m_Num1 - m_Num2;
        }
    };
    
    //乘法计算器类
    class MulCalculator : public AbstractCalculator
    {
    public:
        int getResult()
        {
            return m_Num1 * m_Num2;
        }
    };
    
    void test02()
    {
        //多态使用条件
        //父类指针或者引用指向子类对象
    
        //加法运算
        AbstractCalculator * abc = new AddCalculator;
        abc->m_Num1 = 10;
        abc->m_Num2 = 10;
    
        cout << abc->m_Num1 << "+" << abc->m_Num2 << "=" << abc->getResult() << endl;
    
        //用完记得销毁
        delete abc;
    
        //减法运算
        abc = new SubCalculator;
        abc->m_Num1 = 100;
        abc->m_Num2 = 100;
    
        cout << abc->m_Num1 << "-" << abc->m_Num2 << "=" << abc->getResult() << endl;
        delete abc;
    
        //乘法运算
        abc = new MulCalculator;
        abc->m_Num1 = 100;
        abc->m_Num2 = 100;
    
        cout << abc->m_Num1 << "*" << abc->m_Num2 << "=" << abc->getResult() << endl;
        delete abc;
    }
    
    int main()
    {
        //test01();
        test02();
        
        system("pause");
        return 0;
    
    }
  • 相关阅读:
    args4 1.4.12 编写一个程序,有序打印给定的两个有序数组(含有N 个int 值)中的所有公共元素,程序在最坏情况下所需的运行时间应该和N 成正比。
    优化斐波那契数列递归的计算
    Java中BO、DAO、DO、DTO、PO、POJO、VO的概念
    并查集算法Union-Find的思想、实现以及应用
    计算机网络中一些比较重要的概念
    [转]架构初探之架构的几种设计模式
    常见排序算法的思想以及稳定性分析
    数据库基础知识整理与复习总结
    Java面试之Java集合相关问题答案口述整理
    Java面试之Java基础问题答案口述整理
  • 原文地址:https://www.cnblogs.com/keepma/p/15575770.html
Copyright © 2011-2022 走看看