- 1. C++运算符分类
- 2. 赋值运算符重载
- 3.算数运算符
- 4. 关系运算符重载
- 5. 逻辑运算符重载
- 6.地址运算符
- 7. 其他运算符
- 重载[]:
- 重载<<
C++中的运算符种类很多,除了我们数学中学的各种关系运算符、算数运算符之外,C++也有其特有的运算符。
运算符类型 | C++中常见运算符 |
---|---|
赋值运算符 | 等于(=),加等(+=),减等(-=),乘等(*=),除等(/=) |
算数运算符 | 加(+),减( -),乘( *),除( /), 自增(++),自减(–),取余(%) |
关系运算符 | 等于(==),大于(>),小于(<),不等于(!=),大于等于(>=),小于等于(<=) |
逻辑运算符 | 逻辑与(&&),逻辑或(||),逻辑非(!) |
地址运算符 | (*),(->) |
运算符其实还有很多种,上面只列举了部分我们在编程中常用到的运算符。
2. 赋值运算符重载赋值运算符在使用时,左侧为原有的参数,右侧为代入计算的参数,其使用模板为:
// 重载= P& operator=(P& p1){ ...; // 类成员之间的关系 return *this; } // 重载+= P& operator+=(P& p1){ ...; // 类成员之间的关系 return *this; }3.算数运算符
对于+ - * / 运算符可以直接采用下面格式进行重载。
// 重载+ P& operator+(P& p1){ ...; // 类成员之间的关系 return *this; } // 重载/ P& operator/(P& p1){ ...; // 类成员之间的关系 return *this; }
对与自增(++)、自减(–)运算符,其分为前后自增、前后自减,因此要分开定义。
// 重载++ ++p 前自增 P& operator++(){ ...; // 类成员之间的关系 return *this; } // 重载++ p++ 后自增 P& operator++(int){ P temp = *this; ...; // 类成员之间的关系 return temp; }4. 关系运算符重载
关系运算符返回值为布尔值,在重载时将返回值设为bool类型
// 重载< bool operator<(P& p1){ ...; // 类成员之间的关系 return true/false; } // 重载== bool operator==(P& p1){ ...; // 类成员之间的关系 return true/false; }5. 逻辑运算符重载
// 重载< bool operator&&(P& p1,P& p2){ ...; // 类成员之间的关系 return true/false; } // 重载== bool operator||(P& p1,P& p2)){ ...; // 类成员之间的关系 return true/false; }
C++从语法上支持逻辑操作符重载,但是逻辑操作符重载后无法完全实现原生的语义,不满足短路法则,因此在实际使用时尽量不要重载逻辑运算符。
6.地址运算符地址运算符我们一般不会重载,一般会在使用迭代器时使用,如下面所示:
template7. 其他运算符 重载[]:T& operator*() { return node->element; } template T* operator->() { return &node->element; }
在设计数组列表操作时,我们往往都需要使用[]符号,下面对其进行重载:
template重载<<T& operator[](int index){ T& a; ...; return a; }
我们如果想使用cout<<输出我们的类成员,我们就需要重载<<运算符
templateostream& operator<<(ostream& out, const P & x) { ...; // 将输出数据加载到 ostream 内存上 return out; }
如以下代码:
templatevoid ArrayList ::output(ostream& out) const { // copy 元素数组[element, element+list_siize]范围内的元素到输出迭代器上 copy(element, element + list_size, ostream_iterator (cout, " ")); } // 重载<< template ostream& operator<<(ostream& out, const ArrayList & x) { x.output(out); return out; }