斗破C++编程入门系列之九:函数重载与模板函数

斗破C++目录:

斗破C++编程入门系列之前言(斗之气三段)
斗破C++编程入门系列之二:Qt的使用介绍(斗之气三段)
斗破C++编程入门系列之三:数据结构(斗之气三段)
斗破C++编程入门系列之四:运算符和表达式(斗之气五段)
斗破C++编程入门系列之五:算法的基本控制结构之选择结构(斗之气八段)
斗破C++编程入门系列之六:算法的基本控制结构之循环结构(斗之气八段)
斗破C++编程入门系列之七:自定义数据类型(斗之气八段)
斗破C++编程入门系列之八:函数的定义与调用(斗之气八段)
斗破C++编程入门系列之九:函数重载与模板函数(斗之气九段)

鸡啄米C++

记住首页不迷路:
http://www.jizhuomi.com/software/129.html

斗破观看顺序:

https://v.haohuitao.cc/yhplay/336-1-2.html
第一季☞第二季前2集☞特别篇1☞第二季3~12集☞特别篇2沙之澜歌☞第三季☞第四季☞三年之约☞缘起☞年番
斗气大陆等级:
斗气有十一个阶别,斗之气,斗者,斗师,大斗师,斗灵,斗王,斗皇,斗宗,斗尊,斗圣,斗帝。
斗气大陆上很久没有出现过斗帝了。

一、故事:医仙

为了探查加列家族的进药情况,萧炎孤身一人来到了魔兽山脉,魔兽山脉是众多魔兽的聚集地,同时也是各种稀奇药材的宝库,所以这里常年会吸引许多采药团进行采药,而采药团因为没有护卫,所以进山前会和一些佣兵团一同进入,寻得宝物后五五平分。
突然,远处传来一个女孩子的呼救声,一群魔兽“合猿”正在追赶一个女孩子,这个“合猿”名声极差是个十足的坏猿。萧炎见状及时救下了女子,得知女子叫“小医线”,是个采药人,家住青山镇万药斋。小医仙为了让萧炎能够护送自己回到青山镇,答应事后会将加列家族的进药路线告知。在回青山镇的途中,小医仙发现了一个神秘的洞口,在好说歹说下请求萧炎可以同她一起进洞寻宝,是否一无所获,还是别有洞天,请听下回分解。

二、C++:函数重载与模板函数(斗之气九段)

如果两个函数同名,但是参数不同,那么这就叫做重载。代码如下:

#include "mainwindow.h"

#include <QApplication>
#include <QDataStream>
#include <QDebug>

//定义类型
struct Person{
    QString name; //名字
    int age;      //年龄
    int level;    //斗之气等级
};

//函数:功能是升级斗之气等级, 默认只能升一级
void level_up(Person & anyone){

    //斗气等级提升
    anyone.level = anyone.level + 1;
}

//函数:功能是升级斗之气等级,指定生几级
void level_up(Person & anyone, int value){

    //斗气等级提升
    anyone.level = anyone.level + value;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    Person xiaoyan; //萧炎
    xiaoyan.name = "xiaoyan";
    xiaoyan.age = 17;
    xiaoyan.level = 8;

    qDebug() << "萧炎目前的斗之气等级 " << xiaoyan.level;
    level_up(xiaoyan);
    qDebug() << "升级后的斗之气等级 " << xiaoyan.level;

    //使用重载函数,连升3级别
    level_up(xiaoyan,3);
    qDebug() << "升级后的斗之气等级 " << xiaoyan.level;

    return a.exec();
}

好了,我们看看另外一个,模版函数,我举个例子,斗气大陆也有魔兽,魔兽也会升级,那我想用函数给魔兽升级,用之前给人类升级的函数就不能用了,必须再写一个函数,是不是很麻烦。
这个时候模版函数出现了,它允许一个函数传入不同类型的参数,实现相同的功能,请看下面的代码

#include "mainwindow.h"

#include <QApplication>
#include <QDataStream>
#include <QDebug>

//定义人的类型
struct Person{
    QString name; //名字
    int age;      //年龄
    int level;    //斗之气等级
};

//魔兽的类型
struct Monster{
    QString name; //名字
    int level;    //斗之气等级
};

//函数:功能是升级斗之气等级, 默认只能升一级
template <typename T>
void level_up(T & anyone){

    //斗气等级提升
    anyone.level = anyone.level + 1;
}

//函数:功能是升级斗之气等级,指定生几级
template <typename T>
void level_up(T & anyone, int value){

    //斗气等级提升
    anyone.level = anyone.level + value;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    Person xiaoyan; //萧炎
    xiaoyan.name = "xiaoyan";
    xiaoyan.age = 17;
    xiaoyan.level = 8;

    qDebug() << "萧炎目前的斗之气等级 " << xiaoyan.level;
    level_up(xiaoyan);
    qDebug() << "升级后的斗之气等级 " << xiaoyan.level;

    //使用重载函数,连升3级别
    level_up(xiaoyan,3);
    qDebug() << "升级后的斗之气等级 " << xiaoyan.level;

    //创建一个魔兽
    Monster monkey;
    monkey.name = "monkey";
    monkey.level = 1;

    qDebug() << "合猿目前的斗之气等级 " << monkey.level;
    level_up(monkey);
    qDebug() << "合猿升级后的斗之气等级 " << monkey.level;

    return a.exec();
}

现在大家可以看到level_up可以同时升级人和魔兽的等级,大家可以打印一下,看看结果。
模版函数一般在后期整合和优化代码的时候会用到,这里面用的T参数可以用其他字母代替,比如A,B,C。一开始写代码的时候并不会考虑的那么周全,所以Ctrl+C然后Ctrl+V是写代码中很常见的操作(笑场)。

三、英语:

先来看几个单词

  • template:模版
  • overload:重载
  • Monster:怪兽
  • Monkey:猴子

再来看个句子:

  • Is it(这个) nothing(无任何东西), or is there(那里) another(其他的) world(世界)?
  • 是否一无所获,还是别有洞天
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可峰科技

生活不易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值