C++一元运算符重载

简介:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
using  namespace  std;
class  Integer {
   long  i;
   Integer* This() {  return  this ; }
public :
   Integer( long  ll = 0) : i(ll) {}
   // No side effects takes const& argument:
   friend  const  Integer&
     operator+( const  Integer& a);
   friend  const  Integer
     operator-( const  Integer& a);
   friend  const  Integer
     operator~( const  Integer& a);
   friend  Integer*
     operator&(Integer& a);
   friend  int
     operator!( const  Integer& a);
   // Side effects have non-const& argument:
   // Prefix:
   friend  const  Integer&
     operator++(Integer& a);
   // Postfix:
   friend  const  Integer
     operator++(Integer& a,  int );
   // Prefix:
   friend  const  Integer&
     operator--(Integer& a);
   // Postfix:
   friend  const  Integer
     operator--(Integer& a,  int );
};
// Global operators:
const  Integer& operator+( const  Integer& a) {
   cout <<  "+Integer\n" ;
   return  a;  // Unary + has no effect
}
const  Integer operator-( const  Integer& a) {
   cout <<  "-Integer\n" ;
   return  Integer(-a.i);
}
const  Integer operator~( const  Integer& a) {
   cout <<  "~Integer\n" ;
   return  Integer(~a.i);
}
Integer* operator&(Integer& a) {
   cout <<  "&Integer\n" ;
   return  a.This();  // &a is recursive!
}
int  operator!( const  Integer& a) {
   cout <<  "!Integer\n" ;
   return  !a.i;
}
// Prefix; return incremented value
const  Integer& operator++(Integer& a) {
   cout <<  "++Integer\n" ;
   a.i++;
   return  a;
}
// Postfix; return the value before increment:
const  Integer operator++(Integer& a,  int ) {
   cout <<  "Integer++\n" ;
   Integer before(a.i);
   a.i++;
   return  before;
}
// Prefix; return decremented value
const  Integer& operator--(Integer& a) {
   cout <<  "--Integer\n" ;
   a.i--;
   return  a;
}
// Postfix; return the value before decrement:
const  Integer operator--(Integer& a,  int ) {
   cout <<  "Integer--\n" ;
   Integer before(a.i);
   a.i--;
   return  before;
}
int  main() {
   Integer a;
   +a;
   -a;
   ~a;
   Integer* ip = &a;
   !a;
   ++a;
   a++;
   --a;
   a--;
   
   return  0;
///:~

      本文转自FrankNie0101 51CTO博客,原文链接:http://blog.51cto.com/frankniefaquan/1934028 ,如需转载请自行联系原作者






相关文章
|
7月前
|
算法 C语言
算数、赋值、单目操作符介绍
算数、赋值、单目操作符介绍
47 0
|
2月前
|
C++
45重载单目运算符
45重载单目运算符
13 0
|
3月前
|
编译器 C++
【c++】运算符重载
【c++】运算符重载
【c++】运算符重载
|
6月前
|
编译器 C++
34 C++ - 自增自减(++/--)运算符重载
34 C++ - 自增自减(++/--)运算符重载
17 0
|
7月前
|
编译器 数据库 C语言
8.4 C++ 运算符重载
C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。
29 0
【C++运算符重载】运算符重载(二)
【C++运算符重载】运算符重载(二)
【C++运算符重载】运算符重载(一)
【C++运算符重载】运算符重载(一)
|
程序员 C++
C/C++ 中的一元运算符
一元运算符: 是作用于单个操作数以产生新值的运算符。
84 0
C++:运算符重载与类的赋值运算符重载函数
C++:运算符重载与类的赋值运算符重载函数
|
编译器 C++
C++运算符重载(二)之左移运算符重载
左移运算符重载 作用:可以输出自定义数据类型 1.利用成员函数实现左移运算符 class Person { public: Person(int a, int b) { this->m_A = a; this->m_B = b; } //利用成员函数实现左移运算符:p.operator<<(cout)简化版本p << cout 无法实现cout在左边。 //成员函数 p << p 不是我们想要的效果,想要cout<<p
121 1
C++运算符重载(二)之左移运算符重载