栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

C++运算符重载

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++运算符重载

C++运算符重载
  • 1. C++运算符分类
  • 2. 赋值运算符重载
  • 3.算数运算符
  • 4. 关系运算符重载
  • 5. 逻辑运算符重载
  • 6.地址运算符
  • 7. 其他运算符
      • 重载[]:
      • 重载<<

1. C++运算符分类

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.地址运算符

地址运算符我们一般不会重载,一般会在使用迭代器时使用,如下面所示:

template
T& operator*() { return node->element; }
template
T* operator->() { return &node->element; }
7. 其他运算符 重载[]:

在设计数组列表操作时,我们往往都需要使用[]符号,下面对其进行重载:

template
T& operator[](int index){
    T& a;
    ...;
    return a;
}
重载<<

我们如果想使用cout<<输出我们的类成员,我们就需要重载<<运算符

template
ostream& operator<<(ostream& out, const P& x) {
	...;	// 将输出数据加载到 ostream 内存上
	return out;
}

如以下代码:

template
void 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;
}

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1041255.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号