C++重载递增运算符
#include "stdafx.h"#include <iostream>
using std::cout;
using std::endl;
class kao
{
private:
int len;
public:
kao operator++()
{
// ++(len);
// return len;
};
const kao operator++(int)
{
++(len);
return len;
};
kao(int a=1)
{
cout<<endl<<"构造函数"<<endl;
len=a;
}
void showkao()const
{
cout<<len<<endl;
}
};
int main()
{
kao st(10);
st++;
cout<<"st=";
st.showkao();
return 0;
}
为什么会调用2次构造函数
为什么会不编写 kao operator++()也可以运行?
kao st(10);这里是第一次调用构造函数。
const kao operator++(int) {
++(len);
return len;
};
这里注意到函数的返回类型是const kao但你返回的是int为什么不报错呢?因为类kao有个单参构造函数kao(int a=1),所以后置++的完整写法等价于
const kao operator++(int) {
++(len);
return kao(len);
};
这是第2次调用你写的构造函数(其实参数传递过程中还有调用拷贝构造函数,你没定义,所以追踪不到)
为什么会不编写 kao operator++()也可以运行?
这个是重载前置++的,但你的程序值用了后置++,没有用到前置++,所以不定义也可以。 本帖最后由 骗子死全家 于 2013-10-4 22:02 编辑
仰望天上的光 发表于 2013-10-4 19:46 static/image/common/back.gif
kao st(10);这里是第一次调用构造函数。
const kao operator++(int) {
++(len);
好神奇啊{:5_106:}
原来这个 前缀 后缀是这样用的
{:5_106:}
仰望天上的光 发表于 2013-10-4 19:46 static/image/common/back.gif
kao st(10);这里是第一次调用构造函数。
const kao operator++(int) {
++(len);
可以在编译器中查出来 kao的单参构造函数吗
(单步走) 骗子死全家 发表于 2013-10-4 22:02 static/image/common/back.gif
可以在编译器中查出来 kao的单参构造函数吗
(单步走)
可以啊,单步执行到return len;的时候按F11,就可以进入该构造函数(你应该知道调试时F10和F11的区别吧?不知道的话自己baidu下) {:5_109:}谢谢
页:
[1]