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;
}
相关推荐
一晌小贪欢几秒前
深入理解 Python HTTP 请求:从基础到高级实战指南
开发语言·网络·python·网络协议·http
Cinema KI2 分钟前
C++11(下) 入门三部曲终章(基础篇):夯实语法,解锁基础编程能力
开发语言·c++
m0_748229992 分钟前
PHP+Vue打造实时聊天室
开发语言·vue.js·php
亓才孓4 分钟前
[JDBC]事务
java·开发语言·数据库
燃于AC之乐5 分钟前
深入解剖STL List:从源码剖析到相关接口实现
c++·stl·list·源码剖析·底层实现
枫叶丹47 分钟前
【Qt开发】Qt界面优化(一)-> Qt样式表(QSS) 背景介绍
开发语言·前端·qt·系统架构
汉克老师10 分钟前
GESP2025年6月认证C++二级( 第一部分选择题(9-15))
c++·循环结构·求余·gesp二级·gesp2级·整除、
不想睡觉_10 分钟前
优先队列priority_queue
c++·算法
灰子学技术8 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
二十雨辰9 小时前
[python]-AI大模型
开发语言·人工智能·python