设为首页 加入收藏

TOP

C++重载运算符和标准模板库实例讲解(一)
2018-05-26 14:13:59 】 浏览:405
Tags:重载 运算 符和 标准 模板 实例 讲解

一、重载运算符

C++中,不只是函数可以重载,某些运算符也是可以重载的,即可以自定义运算符的功能,可以重载的运算符如下:

运算符 名称 类型
, 逗号 二进制
! 逻辑“非” 一元
!= 不相等 二进制
% 取模 二进制
%= 取模赋值 二进制
& 按位“与” 二进制
& address-of 一元
&& 逻辑“与” 二进制
&= 按位“与”赋值 二进制
( ) 函数调用
( ) 强制转换运算符 一元
* 乘法 二进制
* 指针取消引用 一元
*= 乘法赋值 二进制
+ 添加 二进制
+ 一元加 一元
++ 递增1 一元
+= 加法赋值 二进制
- 减法 二进制
- 一元求反 一元
-- 递减1 一元
-= 减法赋值 二进制
-> 成员选择 二进制
->* 指向成员的指针选定内容 二进制
/ 除法 二进制
/= 除法赋值 二进制
< 小于 二进制
<< 左移 二进制
<<= 左移赋值 二进制
<= 小于或等于 二进制
= 赋值 二进制
== 相等 二进制
> 大于 二进制
>= 大于或等于 二进制
>> 右移 二进制
>>= 右移赋值 二进制
[ ] 数组下标
^ 异或 二进制
^= 异或赋值 二进制
| 按位“与或” 二进制
|= 按位“与或”赋值 二进制
|| 逻辑“或” 二进制
~ 二进制反码 一元
delete Delete
new New
conversion operators 转换运算符 一元

不可重载的运算符:

Operator Name
. 成员选择
.* 指向成员的指针选定内容
:: 范围解析
? : 条件运算
# 预处理器转换为字符串
## 预处理器串联


在将这些运算符重载之后,运算符就被赋予了的新的功能,重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表:

Complex operator+(const Complex&, const Complex&);//重载+运算符 实现两个复数相加
部分运算符实例如下,实现过程见注释:
①:二元运算符重载

#include 
  
   
using namespace std;

class Complex {//复数类
public:
double re, im;//实部 虚部
Complex(){//无参构造函数
}
Complex(double x,double y){//含参构造函数
 re=x;
 im=y;
}
Complex operator+( Complex &x );//重载+运算符  实现复数相加
void Display( ) {cout << re << ", " << im << endl; }
};

Complex Complex::operator+( Complex &x ) {
return Complex( re + x.re, im + x.im );
}

int main() {
Complex a = Complex( 1.2, 3.4 );
Complex b = Complex( 5.6, 7.8 );
Complex c = Complex( 0.0, 0.0 );
c = a + b;
c.Display();
}

  

②:关系运算符重载

#include
  
   
using namespace std;
class Time//时间类
{
private:
 int month;
 int day;
 int hour;
 int minute;
public:
 Time(int mon,int d,int h,int m){//含参构造函数
  month=mon;
  day=d;
  hour=h;
  minute=m;}
 Time(){month=day=hour=minute=0;//无参构造函数
 }
 //重载<操作符  实现时间大小的比较
 bool operator<(const Time &x){//如果时间t1
   
    

③:输入/输出运算符重载

#include
     
      
using namespace std;
class Time//时间类
{
private:
 int month;
 int day;
 int hour;
 int minute;
public:
 Time(int mon,int d,int h,int m){//含参构造函数
  month=mon;
  day=d;
  hour=h;
  minute=m;}
 Time(){month=day=hour=minute=0;//无参构造函数
 }
 //重载<<操作符
  friend ostream &operator<<(ostream &out,const Time &t){
out<
      
       >操作符 friend istream &operator>>(istream &in,Time &t){ in>>t.month>>t.day>>t.hour>>t.minute; return in; } }; int main() { Time x(8,8,8,8); Time y; cout<
       
        >y; cout<
        
         

④:递增(++)递减(--)运算符重载

#include 
          
           
using namespace std;
class Time
{
private:
int hours; // 0 到 23
int minutes;  // 0 到 59
public:
// 所需的构造函数
Time(){
hours = 0;
minutes = 0;
}
Time(int h, int m){
hours = h;
minutes = m;
}
// 显示时间的方法
void displayTime()
{
cout << hours << "点" << minutes <<"分"<
           
            = 60) { ++hours; minutes -= 60; } return Time(hours, minutes); } // 重载后缀递增运算符( ++ ) Time operator++( int )//int 用于区分前加和后加 { // 创建临时对象,保存原始值 Time T(hours, minutes); // 对象加 1 ++minutes; if(minutes >= 60) { ++hours; minutes -= 60; } // 返回旧的原始值 return T; } /*重载前加和后加的区别: *++i 直接把该对象的值+1
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++结合TCP/IP协议 实现客户端和.. 下一篇著名的C/C++框架和第三方库总结

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目