详解C++编程中一元运算符的重载
2019/7/13 20:55:40
本文主要是介绍详解C++编程中一元运算符的重载,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
可重载的一元运算符如下:
- !(逻辑“非”)
- &(取址)
- ~(二进制反码)
- *(取消指针引用)
- +(一元加)
- -(一元求反)
- ++(递增)
- --(递减)
- 转换运算符
后缀递增和递减运算符(++ 和 ––)在递增和递减中单独处理,下面会讲到。
以下规则适用于所有其他一元运算符。若要将一元运算符函数声明为非静态成员,则必须用以下形式声明它:
ret-type operator op ()
其中 ret-type 是返回类型,op 是上表中列出的运算符之一。
若要将一元运算符函数声明为全局函数,则必须用以下形式声明它:
ret-type operator op (arg )
其中 ret-type 和 op 如上所述用于成员运算符函数,arg 是要参与运算的类类型的参数。
注意
一元运算符的返回类型没有限制。例如,逻辑“非”(!) 返回整数值是合理的,但并非强制性的。
递增和递减运算符重载
由于递增和递减运算符各有两个变量,因此它们属于一个特殊类别:
- 前置递增和后置递增
- 前置递减和后置递减
编写重载的运算符函数时,为这些运算符的前缀和后缀版本实现单独的版本很有用。若要区分这两者,请遵循以下规则:运算符的前缀形式与声明任何其他一元运算符的方式完全相同;后缀形式接受 int 类型的其他参数。
注意
当为递增或递减运算符的前缀形式指定重载运算符时,其他参数的类型必须是 int;指定任何其他类型都将产生错误。
以下示例显示如何为 Point 类定义前缀和后缀递增和递减运算符:
// increment_and_decrement1.cpp class Point { public: // Declare prefix and postfix increment operators. Point& operator++(); // Prefix increment operator. Point operator++(int); // Postfix increment operator. // Declare prefix and postfix decrement operators. Point& operator--(); // Prefix decrement operator. Point operator--(int); // Postfix decrement operator. // Define default constructor. Point() { _x = _y = 0; } // Define accessor functions. int x() { return _x; } int y() { return _y; } private: int _x, _y; }; // Define prefix increment operator. Point& Point::operator++() { _x++; _y++; return *this; } // Define postfix increment operator. Point Point::operator++(int) { Point temp = *this; ++*this; return temp; } // Define prefix decrement operator. Point& Point::operator--() { _x--; _y--; return *this; } // Define postfix decrement operator. Point Point::operator--(int) { Point temp = *this; --*this; return temp; } int main() { }
可使用以下函数头在文件范围中(全局)定义同一运算符:
friend Point& operator++( Point& ) // Prefix increment friend Point& operator++( Point&, int ) // Postfix increment friend Point& operator--( Point& ) // Prefix decrement friend Point& operator--( Point&, int ) // Postfix decrement
表示递增或递减运算符的后缀形式的 int 类型的参数不常用于传递参数。它通常包含值 0。但是,可按以下方式使用它:
// increment_and_decrement2.cpp class Int { public: Int &operator++( int n ); private: int _i; }; Int& Int::operator++( int n ) { if( n != 0 ) // Handle case where an argument is passed. _i += n; else _i++; // Handle case where no argument is passed. return *this; } int main() { Int i; i.operator++( 25 ); // Increment by 25. }
除显式调用之外,没有针对使用递增或递减运算符来传递这些值的语法,如前面的代码所示。实现此功能的更直接的方法是重载加法/赋值运算符 (+=)。
这篇关于详解C++编程中一元运算符的重载的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器