C++ 58 之 计算器案例

虚函数,vitual function

C++动态多态性是通过虚函数来实现的,虚函数允许子类(派生类)重新定义父类(基类)成员函数,而子类(派生类)重新定义父类(基类)虚函数的做法称为覆盖(override),或者称为重写。

对于特定的函数进行动态绑定,c++要求在基类中声明这个函数的时候使用virtual关键字,动态绑定也就对virtual函数起作用.

cpp 复制代码
#include <iostream>
#include <string>
using namespace std;

class Cal {
public:
    int m_a;
    int m_b;
    virtual int getRes(){
        return 0;
    }
};

// 加法  子类要重写父类的虚函数
class Add : public Cal {
public:
    virtual int getRes(){
        return m_a + m_b;
    }
};

// 减法
class Sub : public Cal {
public:
    int getRes(){
        return m_a - m_b;
    }
};

int main()
{
    // 多态可以改善代码的可读性和组织性,同时也可以让程序具有可扩展性
    // 动态多态产生条件:
    // 1.要有继承关系
    // 2.父类中有虚函数、子类要重写父类的虚函数
    // 3.父类的指针或引用指向子类的对象
    
    // 加法:写法1 指针 
    // Cal* c1 = new Add;  // 函数名一样,但对象不一样,就执行不同对象里的函数 多态
    // c1->m_a = 1;
    // c1->m_b = 2;
    // cout << c1->getRes() << endl;
    // delete c1;
    // c1 = NULL;

    // 减法:写法1 指针
    // Cal* c1 = new Sub;
    // c1->m_a = 1;
    // c1->m_b = 2;
    // cout << c1->getRes() << endl;
    // delete c1;
    // c1 = NULL;

    // 加法:写法2 引用
    Add a1;
    Cal& c1 = a1;
    c1.m_a = 1;
    c1.m_b = 2;
    cout << c1.getRes() << endl;

    // 减法:写法2 引用
    Sub s1;
    Cal& c2 = s1;
    c2.m_a = 1;
    c2.m_b = 2;
    cout << c2.getRes() << endl;
    
    return 0;
}
相关推荐
家有狸花17 分钟前
VSCODE驯服日记(三):配置C++环境
c++·ide·vscode
dengqingrui12339 分钟前
【树形DP】AT_dp_p Independent Set 题解
c++·学习·算法·深度优先·图论·dp
C++忠实粉丝41 分钟前
前缀和(8)_矩阵区域和
数据结构·c++·线性代数·算法·矩阵
ZZZ_O^O1 小时前
二分查找算法——寻找旋转排序数组中的最小值&点名
数据结构·c++·学习·算法·二叉树
吾爱星辰3 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
ChinaDragonDreamer3 小时前
Kotlin:2.0.20 的新特性
android·开发语言·kotlin
IT良3 小时前
c#增删改查 (数据操作的基础)
开发语言·c#
小飞猪Jay3 小时前
C++面试速通宝典——13
jvm·c++·面试
Kalika0-04 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
_.Switch4 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j