前置++ 后置++

【1】后置++(基本内置类型)

#include <iostream>
using namespace std;

int main()
{
    cout << "Hello World" << endl;
    int a = 3;
    int b = 0;
    int c = 3;
    a = a++;
    a = a++;
    b = c++;
    cout << "a : " << a << endl;
    cout << "b : " << b << endl;
    cout << "c : " << c << endl;
    return 0;
}

// out
/*
Hello World
a : 3
b : 3
c : 4
*/

【2】自定义类型

示例代码如下:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Age  
 5 {  
 6 public :
 7     Age(int v = 18) : m_i(v)
 8     {}
 9     
10     Age& operator++() //前置++  
11     {  
12         ++m_i; // 自增1
13         return *this;
14     }  
15   
16     const Age operator++(int) // 后置++  
17     {  
18         Age temp = *this; // 临时对象
19         ++(*this);        // 调用前置++  
20         return temp;      // 返回临时对象
21     }  
22   
23     Age& operator=(int i) // 赋值操作  
24     {  
25         this->m_i = i;  
26         return *this;  
27     }  
28     
29     int value() const 
30     {
31         return m_i;
32     }
33     
34 private :  
35     int m_i;  
36 };  
37 
38 int main()
39 {
40     Age a;  
41     a = a++;
42     cout << "a1 : " << a.value() << endl;
43     
44     Age b;
45     b = a++;
46     cout << "a2 : " << a.value() << endl;
47     cout << "b1 : " << b.value() << endl;
48     
49     //(a++)++;   // 编译错误  
50     //++(a++);   // 编译错误  
51     //a++ = 1;   // 编译错误  
52     (++a)++;   // OK
53     cout << "a3 : " << a.value() << endl;
54     ++(++a);   // OK
55     cout << "a4 : " << a.value() << endl;
56     ++a = 1;   // OK  
57     cout << "a5 : " << a.value() << endl;
58     return 0;
59 }
60 
61 // run out:
62 a1 : 18
63 a2 : 19
64 b1 : 18
65 a3 : 21
66 a4 : 23
67 a5 : 1

分析总结:

(1)两种类型(内置类型、自定义类型)前置++和后置++的表现是一致的。

(2)前置++:自增1,返回对象本身。

(3)后置++:直接加1,但是,返回的是加1前的对象(临时对象)。

综上所述,a = a++; 这一句的执行结果:a的值没有改变。

 

Good Good Study, Day Day Up.

顺序 选择 循环 总结

posted @ 2019-05-05 09:03  kaizenly  阅读(685)  评论(0编辑  收藏  举报
打赏