【1】对象与变量
变量是变量,对象归对象。二者不可混为一谈(许多资料书把两者没有明确区分)。
个人认为,由类直接创建的称为对象。由内部数据类型定义的称为变量。
另外,一个对象包含许多成员变量和成员函数。
下面就对象与变量的对比实现示例代码如下:
1 #include<iostream> 2 using namespace std; 3 4 /* 5 *自定义整型类 6 */ 7 class Int 8 { 9 private: 10 int num; 11 12 public: 13 Int(int x = 0):num(x) //默认复合构造函数 14 { 15 cout<<"Create Int: "<<this<<endl; 16 } 17 Int(const Int &it):num(it.num) //拷贝构造函数 18 { 19 cout<<"Copy Int object: "<<this<<endl; 20 } 21 Int & operator=(const Int &it) //赋值函数 22 { 23 cout<<"operator = "<<this<<endl; 24 if(this != &it) 25 { 26 num = it.num; 27 } 28 cout<<" = "<<endl; 29 return *this; 30 } 31 ~Int() //析构函数 32 { 33 cout<<"Free Int: "<<num<<" "<<this<<endl; 34 } 35 36 public: 37 Int operator++() 38 //(Int * const this)(隐藏this指针) 39 { 40 ++num; 41 return *this; 42 } 43 /* 44 *方法1实现后置++ 45 */ 46 /* 47 Int operator++(int) 48 { 49 Int tmp = *this; // Int tmp(*this); 50 ++num; 51 return tmp; 52 } 53 */ 54 /* 55 *方法2实现后置++ 56 */ 57 Int operator++(int) 58 { 59 return Int(num++); 60 } 61 /* 62 *方法3实现后置++ 63 */ 64 /* 65 Int operator++(int) 66 { 67 Int tmp = *this; 68 ++*this;//(*this).operator++();this->operator++(); 69 return tmp; 70 } 71 */ 72 /* 73 *方法4实现后置++ 74 */ 75 /* 76 Int operator++(int) 77 { 78 Int tmp=*this; 79 ++num; 80 return tmp; 81 } 82 */ 83 Int operator+(const Int &it) //重载运算符+(Int) 84 //Int operator+(Int * const this, const Int &it) 参数 85 { 86 return Int((*this).num + it.num); 87 } 88 89 Int operator+(const int x) //重载运算符+(int) 90 { 91 return Int(num + x); 92 } 93 int operator=(const int x) //重载赋值运算符= 94 { 95 num = x; 96 return x; 97 } 98 bool operator<(int x) // 重载比较运算符< 99 { 100 return num < x; 101 } 102 void print() const //打印 103 { 104 cout<<num<<endl; 105 } 106 }; 107 ////////////////////////////////////// 108 109 void main() 110 { 111 //隐式类型转换 112 Int a = 9, b; 113 //构建a对象,隐式类型转换 114 //构建b对象,复合默认构造函数。所以,对象b中成员变量num=0; 115 116 //对象+变量 117 int x = 10; 118 b = a + x; // == a.operator+(x) == operator(&a, x); 119 b.print(); //19 120 121 //对象 + 对象 122 Int c; 123 c = a + b; //对象 + 对象 124 //c = a.operator+(b); 125 //c = operator(&a,b); 126 //c.operator = (a.operator+(b)); 127 c.print(); //28 128 129 //前置++ 130 Int i = 100; 131 ++i; 132 //i.operator++(); 133 //operator++(&i); 134 Int j = 0; 135 j = i++; 136 i.print(); //102 137 j.print(); //101 138 139 140 //对象与变量对比后置++ 141 Int d = 1, e = 0; 142 e = d++; 143 // j=i.operator++(0); 144 // j.operator=(i.operator++(0)); 145 // j=operator++(&i,0); 146 d.print(); //2 147 e.print(); //1 148 //m,n可以看做变量 149 int m = 0, n = 0; 150 m = n++; 151 cout<<m<<endl; //0 152 153 Int f= 1,g=1; //对象 154 f + g = 12; //可以通过OK!!!!!!//??????????? 155 156 int k = 1, l = 2; 157 // k + l = 10; //error!!不可以通过 158 159 //变量 160 int h = 10, p = 10; //变量 161 ++i = 10; 162 //i++=10; //error!!!!!!!!! 163 164 //对象 165 Int s = 0; 166 ++s = 10; 167 //i.operator++(); 168 //operator++(&i); 169 i++ = 100; 170 171 //对象操作 172 Int ai = 0, aj = 10, ak; 173 ak = ai + aj; 174 ak.print(); //10 175 ai = ai++ +1; 176 //产生三个对象: 177 //ai.operator=(ai.operator++(0).operator+(1)); 178 //ai.operator=(operator++(&ai,0).operator+(1)); 179 //operator=(&ai, (operator++(&ai,0).operator+(1))) 180 // ai ,@1 @2 181 ai.print(); //1 182 }
分析内容见代码具体备注。
【2】关于变量 i++
示例代码如下:
1 #include<iostream> 2 using namespace std; 3 4 void main() 5 { 6 int a = 4; 7 a += (a++); 8 cout<<"a :"<<a<<endl; //9 = 5 + 4 9 10 int b = 4; 11 b += (++b); 12 cout<<"b :"<<b<<endl; //10 = 5 + 5 13 14 int c = 4; 15 (++c) += c; 16 cout<<"c :"<<c<<endl; //10 = 5 + 5 17 18 int d = 4; 19 (++d) += (d++); 20 cout<<"d :"<<d<<endl; //11 = 5 + 6 21 22 int f; 23 cout<<"f :"<<(f=d)<<endl; //11 24 int m = 5; 25 26 m *= m*m; 27 cout<<"m :"<<m<<endl; //125 = 5 * 5 * 5 28 29 int n = 5; 30 n *= n*(n++); 31 cout<<"n :"<<n<<endl; //126 = 5 * 5 * 5 + 1 32 33 int h = 5; 34 h *= (h++)*h; 35 cout<<"h :"<<h<<endl; //126 = 5 * 5 * 5 + 1 36 37 int k = 0; 38 ++k = h; 39 cout<<"k :"<<k<<endl; //126 40 41 int g = 10; 42 (++g) *= g*g; 43 cout<<"g :"<<g<<endl; //1331 = 11 * 11 * 11 44 45 int s = 10; 46 s = (++s)*s*s; 47 cout<<"s :"<<s<<endl; //1331 = 11 * 11 * 11 48 } 49 50 /* 51 a :9 52 b :10 53 c :10 54 d :11 55 f :11 56 m :125 57 n :126 58 h :126 59 k :126 60 g :1331 61 s :1331 62 */
具体结论自己总结。
Good Good Study, Day Day Up.
顺序 选择 循环 坚持 总结