什么是 C++ 的函数重载?它的优点是什么?和重写有什么区别?

什么是 C++ 的函数重载?

在 C++ 中,函数重载(Function Overloading)是指在同一作用域内定义多个同名函数,但这些函数的参数列表不同。编译器会根据调用时传递的参数类型和数量来选择最合适的函数进行调用。函数重载的主要目的是提高代码的可读性和复用性。

函数重载的优点

  1. 提高代码可读性:使用相同的函数名称可以更好地表达功能,使代码更易于理解和维护。
  2. 增强代码复用性:可以通过不同的参数列表实现相同的功能,减少重复代码的编写。
  3. 灵活性:可以根据不同的需求提供多种实现方式,使代码更加灵活。

函数重载的示例

#include <iostream>
#include <string>

// 重载函数:根据不同的参数类型和数量
void print(int num) {
    std::cout << "整数: " << num << std::endl;
}

void print(double num) {
    std::cout << "浮点数: " << num << std::endl;
}

void print(const std::string& str) {
    std::cout << "字符串: " << str << std::endl;
}

int main() {
    print(10);        // 调用 void print(int num)
    print(3.14);      // 调用 void print(double num)
    print("Hello");   // 调用 void print(const std::string& str)

    return 0;
}

函数重载与函数重写的区别

  1. 函数重载(Function Overloading):在同一作用域内定义多个同名函数,但参数列表不同。编译器根据调用时的参数类型和数量选择最合适的函数。不涉及继承关系。
  2. 函数重写(Function Overriding):在派生类中重新定义基类中的虚函数。派生类中的函数必须与基类中的函数具有相同的函数签名(包括返回类型、函数名称、参数列表)。涉及继承关系,通常用于实现多态。

函数重写的示例

#include <iostream>

class Base {
public:
    virtual void display() {
        std::cout << "Base class display" << std::endl;
    }
};

class Derived : public Base {
public:
    void display() override {
        std::cout << "Derived class display" << std::endl;
    }
};

int main() {
    Base* basePtr = new Derived();
    basePtr->display();  // 调用 Derived 类的 display 方法

    delete basePtr;
    return 0;
}

总结

  • 函数重载:在同一作用域内定义多个同名函数,但参数列表不同,提高代码的可读性和复用性。
  • 函数重写:在派生类中重新定义基类中的虚函数,实现多态,涉及继承关系。
#c++笔记#
全部评论

相关推荐

03-13 00:04
已编辑
吉林大学 Java
约面的挺突然。。狠下心接了1.自我介绍2.讲讲JAVA的反射3.可以继续讲讲AOP,动态代理[&nbsp;因为讲反射不小心吟唱到了例如AOP的动态代理,但是这块记忆的非常不熟,结果磕磕绊绊&nbsp;]4.项目我看你写了AOP和注解,具体怎么实现滑动窗口限流的[&nbsp;梦到什么说什么,吟唱八股发散千万不要散到自己不熟悉的区域&nbsp;]5.也讲讲为什么另一个项目选择令牌桶,具体流程6.&nbsp;OK,讲讲&nbsp;Redis&nbsp;的数据类型?还有吗?就了解这五种嘛[&nbsp;把5个的基础类型从应用对比到历届底层全都吟唱了一遍。一句还有吗直接没力气了,简历就写了理解5种,别的我是真一点没看TT&nbsp;]7.讲讲Redission分布式锁实现8.这个指数退避怎么实现的9.在这里有考虑去保障幂等性嘛10.这里为什么使用指数退避呢?&nbsp;什么时候用均匀重传[已经晕过去了说不了解,刚说了后就意识到,估计应该说指数退避能缓解压力防止下游服务器雪崩之类的]11.ok,那讲讲JMM12.讲讲RocketMQ如何保证的不丢消息13.讲讲RocketMQ延迟消息原理14.讲讲项目Redis实现会话记忆这一块15.如果ai调用function&nbsp;calling出现幻觉,有考虑怎么解决吗?[&nbsp;不了解,面试官说什么接口幂等化,高危操作人工防护,没在听,感觉人已经飞升了TT&nbsp;]16.mcp了解嘛?和function&nbsp;calling有什么区别[&nbsp;依旧不了解,只能说了个前者规范架构抽象解耦,后者耦合高只能算个工具调用]17.AI生成代码的代码质量怎么保障,那平时如何review的呢18.算法。lc215&nbsp;&nbsp;数组中最大第k个元素19.打算考研还是本科就业20.反问1️⃣有哪里不足,有哪些需要提高的部分。[主要说知识广度不够,多刷算法,让我别太紧张]2️⃣部门业务会做什么人生第二次面试。感觉大厂面试官的气场压力很大应该凉了不过这次面试非常锻炼心态,多面试,多面试。
冰炸橙汁_不做oj版:redis除了五种基本数据类型,其他的几种还是要掌握一下的,挺常用
点赞 评论 收藏
分享
在改简历的大卫很认真:天天有面试 = 你已经在 offer 门口了。 海投能面成这样,说明你的简历、基础、学历都是过关的,缺的只是一次刚好匹配的缘分。 关于你说的 SQL 恐惧,我帮你捋一下: - 面试里考来考去,真就那几类: 分组、去重、关联、子查询、窗口函数(row_number、rank、sum 开窗) ​ - 面试官要的不是“写得花里胡哨”,而是思路稳、不出错。 你恐惧的本质不是不会, 是怕临场卡壳、怕写错、怕被追问。
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务