用引用传递对象的时候 依然能改变他的值
你的p++实际上调用的是P对象的 operator++(int) 函数
但是你的类中没有定义这个方法,所以你这个程序根本编译不过。
#include
using namespace std;
class human
{
public:
human() :t(10)
{
cout << "构造" << endl;
}
human &operator++(int)
{
human temp(*this);
t++;
return temp;
}
void print()
{
cout << t << endl;
}
private:
int t;
};
human &can(human &p);
int main()
{
human a;
a.print();
can(a);
a.print();
return 0;
}
human & can(human &p)
{
p++;//将他自加为什么不行
return p;
}
这是个错觉,我们来对比一下简单类型和对象
简单类型 int 属性只有一个:intValue
复杂类型例如 class Dog,属性有很多,比如name,sex,品种,身高体重等等
引用传递对象,仍然可以修改对象的属性,不过对象的引用已经绑定,不能把该引用指向另一条狗。
简单类型也是如此,如int的引用,可以修改它的值,但是也不能绑定为另一个整型变量。
从这点来说,它们是一致的。
引用传递,传的是地址;直接传,跟值传递一样,是形参而已!
p++;//将他自加为什么不行 —— 因为human类没有重载后++运算符。