C++:函数重载

发布时间:2026/10/26 21:45:04
C++:函数重载 定义同一个作用域中可以定义读个同名函数只要他们的参数列表不同编译器就能根据调用时传入参数判断应该调用哪一个。例如下面这两个函数都是叫Add但是他们传入的参数不同。int Add(int a, int b) { return a b; } double Add(double a, double b) { return a b; }Add(1, 2); 调用 int Add(int, int)Add(1.5, 2.5); 调用 double Add(double, double)这就是函数重载。还有最直观的例子参数数量不同。例如void Print(int a) { std::cout a std::endl; } void Print(int a, int b) { std::cout a b std::endl; } void Print(int a, int b, int c) { std::cout a b c std::endl; }但是返回值不同不能构成函数重载。operator在 C 中operator是一个关键字。它主要用于定义或重载运算符的行为。比如我们平时写a b这里的就是一个运算符。C允许我们自己规定如果a和b是我自己定义的类对象那么a b应该怎么计算这就是运算符重载Operator Overloading。常见的运算符运算符作用加法-减法*乘法/解引用/除法判断相等!判断不等小于大于[]下标访问()函数调用自增--自减左移/流输出右移/流输入为什么需要operator假设我们自己定义一个二维点class Point { public: double x; double y; };然后Point p1; Point p2;我们想实现Point p3 p1 p2;但是问题来了C知道 int int 怎么计算。也知道double double 怎么计算。但是它不知道Point Point应该怎么算。所以我们可以告诉 Cp1 p2应该x相加y相加class Point { public: double x; double y; Point operator(const Point other) { Point result; result.x x other.x; result.y y other.y; return result; } };这里operator就是重载运算符。怎么使用有了上面的定义Point p1; Point p2; p1.x 1; p1.y 2; p2.x 3; p2.y 4;然后Point p3 p1 p2;结果p3.x 4 p3.y 6p1 p2到底发生了什么p1 p2实际上可以理解为p1.operator(p2)所以p1 p2和p1.operator(p2)本质上是在调用同一个东西。所以operator可以拆开理解Point operator(const Point other)可以理解成Point ↑ 返回值 operator ↑ 我要重载 (const Point other) ↑ 参数C允许对象也使用()例如class Test { public: void operator()() { cout Hello; } };现在Test t;可以t();这看起来像函数。但实际上t();调用的是t.operator()();也就是说把一个对象设计成“可以像函数一样调用”。这种对象通常叫函数对象Function Object / Functor。operator()可以带参数例如class Calculator { public: int operator()(int a, int b) { return a b; } };然后Calculator calc;可以int result calc(10, 20);实际上int result calc.operator()(10, 20);operator()可以重载例如class Test { public: void operator()(int x) { cout int endl; } void operator()(double x) { cout double endl; } void operator()(int x, int y) { cout two int endl; } };那么Test t;可以t(10);调用operator()(int)t(3.14);调用operator()(double)t(10, 20);调用operator()(int, int)所以operator() 本身也可以进行函数重载。operator并不等于“函数”operator是一个关键字。例如operator 表示重载 operator- 表示重载 - operator[] 表示重载[] operator() 表示重载()所以operator operator - operator * operator / operator operator [] operator ()都是使用operator关键字来定义运算符重载函数。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询