
函数重载和重写(也叫覆盖)是C++中两个容易混淆的概念,它们都涉及函数名的重复使用,但适用场景、语法要求和运行机制完全不同。
函数重载(Function Overloading)函数重载指的是在同一个作用域中,多个函数具有相同的函数名,但参数列表不同(参数个数、类型或顺序不同)。编译器根据调用时传入的实参来决定调用哪个版本的函数。
注意:返回值类型不同不足以构成重载,必须参数列表有区别。
示例:void print(int x);
void print(double x);
void print(const std::string& s);
这三个函数构成了重载。调用 print(5) 会调用第一个,print("hello") 调用第三个。
关键点:
- 发生在同一个类或同一作用域内
- 函数名相同,参数列表不同
- 与返回类型无关
- 静态联编(编译时确定调用哪个函数)
函数重写是指在继承关系中,派生类重新定义基类中的虚函数,函数名、参数列表和返回类型必须完全相同,且基函数通常声明为 virtual。
重写的目的是实现多态:通过基类指针或引用调用虚函数时,实际执行的是派生类中的版本。
HyperWrite
AI写作助手帮助你创作内容更自信
54
查看详情
示例:
class Base {
virtual void show() { cout << "Base"; }
};
class Derived : public Base {
void show() override { cout << "Derived"; }
};
当执行:
Base* ptr = new Derived();
ptr->show(); // 输出 "Derived"
这体现了动态联编(运行时决定调用哪个函数)。
关键点:
- 发生在基类和派生类之间
- 函数名、参数列表、返回类型必须一致
- 基类函数需为虚函数(virtual)
- 支持多态,运行时绑定
从本质上看:
- 重载是编译时多态,靠参数区分函数
- 重写是运行时多态,靠对象实际类型决定行为
- 重载不依赖继承,重写必须存在继承关系
- 重载可以有不同的返回类型(前提是参数不同),重写通常要求返回类型一致(协变返回类型除外)
基本上就这些。理解清楚作用域、参数和虚函数这三个关键词,就能准确区分重载和重写。
以上就是c++++中函数重载和重写的区别_函数重载与覆盖(重写)概念辨析的详细内容,更多请关注知识资源分享宝库其它相关文章!
相关标签: c++ 区别 作用域 print String 多态 const 引用调用 int double void 指针 继承 虚函数 class 值类型 public 函数重载 实参 function 对象 作用域 大家都在看: c++中如何使用map_C++ map关联容器使用详解 c++中如何调用c语言函数_c++与c语言函数混合调用方法 C++环境搭建需要哪些基础步骤 C++内存模型与并发容器实现原理 如何在C++中链接一个外部库_C++外部库链接配置方法






发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。