C++ operator重载教程_C++运算符重载规则与仿函数编写


运算符重载允许为自定义类型赋予标准运算符新含义,提升代码可读性与操作直观性;仿函数通过重载operator()实现类函数行为,广泛用于STL算法。规则包括:仅能重载已有运算符,五种除外(::、.、.*、?:、sizeof);多数可作为成员或非成员函数,但=、[]、()、->必须为成员;不改变优先级、结合性与操作数个数。例如Complex类重载+实现复数相加,输出流

c++ operator重载教程_c++运算符重载规则与仿函数编写

在C++中,运算符重载是一项强大的功能,它允许我们为自定义类型(如类或结构体)赋予标准运算符新的含义。这不仅提升了代码的可读性,也使对象的操作更直观。同时,仿函数(函数对象)借助运算符重载实现类似函数的行为,广泛应用于STL算法中。

运算符重载的基本规则

运算符重载的本质是编写一个特殊的函数,让原本只能用于内置类型的运算符也能作用于用户自定义类型。以下是关键规则:

  • 只能重载已有的运算符,不能创建新符号,例如无法定义 ** 或 运算符
  • 大部分运算符可重载,但以下五个除外:::(作用域解析)、.(成员访问)、.*(成员指针访问)、?:(条件运算符)、sizeof
  • 重载函数可以作为类的成员函数或全局函数。若需要访问私有成员且逻辑与对象强相关,常设计为成员函数;若涉及类型转换或对称操作(如 a + b),建议使用非成员函数
  • 某些运算符(如 =、[]、()、->)必须作为成员函数重载
  • 重载不应改变原运算符的优先级、结合性或操作数个数

例如,为一个表示复数的类重载加法运算符:

class Complex {
private:
   double real, imag;
public:
   Complex(double r = 0, double i = 0) : real(r), imag(i) {}

   // 成员函数形式重载 +
   Complex operator+(const Complex& other) const {
      return Complex(real + other.real, imag + other.imag);
   }

   void print() const {
      std::cout    }
};

// 使用示例:
// Complex a(3, 4), b(1, 2);
// Complex c = a + b; // 调用重载的 +
// c.print(); // 输出:4 + 6i

常见运算符重载示例

掌握几个典型运算符的写法有助于理解整体机制:

// 重载输出流 std::ostream& operator    os    return os;
}

// 重载赋值运算符 = (通常作为成员函数)
Complex& Complex::operator=(const Complex& other) {
   if (this == &other) return this; // 自赋值检查
   real = other.real;
   imag = other.imag;
   return
this;
}

对于前置++和后置++,注意它们的参数区别:

// 前置 ++
Complex& operator++() {
   ++real;
   return *this;
}

// 后置 ++,需加一个 int 占位符以示区分
Complex operator++(int) {
   Complex temp(*this);
   ++(*this);
   return temp;
}

仿函数(函数对象)的编写

仿函数是定义了 operator() 的类或结构体实例。它像函数一样被调用,但拥有状态,比普通函数更灵活。

NoCode NoCode

美团推出的零代码应用生成平台

NoCode 180 查看详情 NoCode

编写仿函数的核心是重载括号运算符 ():

struct MultiplyBy {
   int factor;
   MultiplyBy(int f) : factor(f) {}

   // 重载函数调用运算符
   int operator()(int x) const {
      return x * factor;
   }
};

// 使用方式:
// MultiplyBy timesTwo(2);
// std::cout

仿函数在STL中非常有用,比如配合 std::transformstd::sort

std::vector nums = {4, 1, 3, 2};
std::sort(nums.begin(), nums.end(), [](int a, int b) { return a > b; }); // lambda
// 或者使用仿函数:
struct Greater {
   bool operator()(int a, int b) const { return a > b; }
};
std::sort(nums.begin(), nums.end(), Greater{});

相比普通函数指针,仿函数支持内联优化,且能携带数据状态,性能更高。

基本上就这些。掌握运算符重载和仿函数,能让C++代码更简洁、高效,尤其在设计容器、智能指针或定制算法时不可或缺。关键是理解语义一致性——重载后的行为应符合直觉,避免滥用导致代码难懂。

以上就是C++ operator重载教程_C++运算符重载规则与仿函数编写的详细内容,更多请关注其它相关文章!


# c++  # stream  # 区别  # c++运算符重载  # 几种  # 几个  # 中非  # 有什么区别  # 自定义  # 运算符  # 代码可读性  # 作用域  # 已有  # 餐饮产品的营销推广策略  # 成都正规网站seo优化费用  # 文山哪有网站优化设计的  # 正定常规网站优化商家  # 揭阳网站seo优化  # 相关文章  # 也能  # 有哪些  # 广西网站建设哪家公司好  # 做推广哪个网站最好  # 网站建设人员需求  # seo 查重在线工具  # 无锡seo互创青年weibo 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 海外搜索引擎推广效果怎么样,怎么分析效果!  c++如何使用std::thread::join和detach_c++线程生命周期管理  苹果手机如何清理系统缓存数据 iPhone非越狱清理垃圾文件的技巧【系统优化】  全球各国上班时间表外贸邮件时间  虫虫助手如何更新游戏  使用Selenium在无头Chrome中交互动态菜单和复选框的策略  基于 Flink 和 Kafka 实现高效流处理:连续查询与时间窗口  Lar*el Eloquent:高效删除多对多关系中无关联子记录的父模型  性能与资源监视器快捷打开  从HTML表单获取逗号分隔值并转换为NumPy数组进行预测  Win10锁屏时间怎么设置 Win10调整自动锁屏时间方法  《洛克王国:世界》国家队搭配攻略  掌握产品代码正则表达式:避免常见陷阱与精确匹配  多多买菜门店端app订单查看方法  解决Windows上Composer PATH变量冲突导致的命令无法识别问题  POKI小游戏在线免费入口链接 POKI小游戏无下载秒玩玩  Go语言中方法与接收器:指针和值类型的调用机制详解  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  向日葵客户端怎么进行语音通话_向日葵客户端语音通话功能使用方法  《跳跳舞蹈》循环播放方法  如何发挥新媒体矩阵作用?新媒体矩阵怎么搭建?  抖音怎么解除第三方绑定_抖音解除第三方平台绑定方法介绍  使用CSS :has() 选择器实现父元素样式控制:从子元素反向应用样式  荣耀 Magic10 Pro 系统更新提示失败_荣耀 Magic10 Pro 升级修复  composer 提示 "requires ext-soap" 缺少 SOAP 扩展怎么办?  如何高效地基于键列值映射DataFrame中的多个列  快手极速版在线体验区 快手极速版网页体验入口  解决CSS background 属性中 cover 关键字的常见误用  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  php如何实现多域名共享session_php存储session到redis与跨域读取配置  WooCommerce 新客户订单自动添加管理员备注教程  c++如何实现观察者设计模式_c++行为型设计模式实战  Pandas中基于动态偏移量实现DataFrame列值位移的策略  无人机考证官网 中国民航无人机考证官网登录入口  汽水音乐官网网页版入口 汽水音乐官网网页版在线入口  LINUX怎么查看显卡信息_LINUX查看GPU状态  微信步数怎么刷_微信步数快速提升技巧  PointNet++语义分割模型中类别变更引发的断言错误及标签处理策略  123网页端官方登录页 123邮箱网页版即时通讯服务  Keras中Convolution2D层及其核心辅助层详解  《美篇》取消会员自动续费方法  如何定制PrimeNG Sidebar的背景颜色  鼠标没反应了怎么办 无线/有线鼠标失灵的解决方法【详解】  使用VS Code调试Python代码:从入门到精通  疯狂小鸟微信小游戏入口 疯狂小鸟网页版秒玩  告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名  抖音如何进行蓝V认证 抖音企业号申请所需资料与流程  什么是Satis,如何用它搭建一个私有的composer仓库?  百度网盘如何设置上传限额  PySimpleGUI中实现键盘按键与按钮事件绑定教程 

 2025-11-25

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.