首先说一下++重载符,++分为前后两种方式的调用。因此就有了两种的符号的调用。大致如下(对于后置++的做法采用了不严谨的重载,返回的应该是 const对象)
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 | namespace class_cplusplus10 { class CBase { public : CBase& operator++() //这里是前置++调用 { printf (_T( "class_cplusplus10::CBase& operator++()\n" )); return * this ; } CBase& operator++( int ) //这里是后置++调用 { printf (_T( "class_cplusplus10::CBase& operator++(int)\n" )); return * this ; } CBase& operator--() { printf (_T( "class_cplusplus10::CBase& operator--()\n" )); return * this ; } CBase& operator--( int ) { printf (_T( "class_cplusplus10::CBase& operator--(int)\n" )); return * this ; } }; } |
上面的代码已经很好的说明了哪一些是前置调用重载,哪一些是后置调用的重载。
然后通过这些函数可以来看看一些哗众取宠的笔试题。
1 2 | class_cplusplus10::CBase base; ++base++; |
问++base++的调用是怎样的,通过调试发现,实际上后置++是先被调用,然后前置++。
不过这里是c++,而这种笔试题往往考的是操作符的优先级。也许一个对象和一个内置类型的变量存在一些不同