C++运算符如何重载?C++操作符重载规则与实例【高手进阶】

admin 百科 9
运算符重载是用函数封装操作逻辑使自定义类型支持+、==等符号的关键机制;不能重载.、.*、::、?:、sizeof;=、[]、->、()只能作为成员函数重载;+、==等对称二元运算符建议用友元重载。

C++运算符如何重载?C++操作符重载规则与实例【高手进阶】-第1张图片-佛山资讯网

运算符重载是C++中实现类“自然行为”的关键机制,本质是用函数封装操作逻辑,让自定义类型像内置类型一样使用+==++等符号。它不是语法糖,而是接口设计——重载是否合理,取决于语义是否清晰、行为是否可预期。

哪些运算符能重载?哪些不能?

绝大多数运算符都支持重载,但有明确限制:

  • 不能重载的5个.(成员访问)、.*(成员指针访问)、::(作用域解析)、?:(三目条件)、sizeof —— 它们与语言底层机制强绑定,禁止重载保障编译器可靠性
  • 只能作为成员函数重载的4个=(赋值)、[](下标)、->(成员指针)、()(函数调用)—— 因为它们必须修改或绑定当前对象状态
  • 建议用友元重载的运算符:对称二元运算符如+==等。例如<code>a + 55 + a都应合法,若只用成员函数,5 + a会因左操作数不是类类型而失败

参数、返回值与const规范怎么定?

错误的签名是重载失效的主因。核心原则:匹配直觉,兼顾效率与安全。

  • 赋值=:必须是成员函数,返回*this的引用(支持链式赋值a = b = c),形参常以const T&amp;amp;传入(避免拷贝)
  • 算术运算符(如+:通常用友元函数,左/右操作数都用const T&amp;amp;,返回新对象(非引用!),不修改原对象
  • 复合赋值(如+=:必须是成员函数,修改自身并返回*this引用,比a = a + b更高效
  • 前置/后置自增(++:前置返回T&(可被赋值),后置需加int占位参数,返回const T(避免(a++)++这类非法链式调用)

实用重载示例:一个精简的Vector2D类

聚焦高频场景,代码直接可运行:

立即学习“C++免费学习笔记(深入)”;

标签: c++ 作用域

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~