程序文档格式.docx
《程序文档格式.docx》由会员分享,可在线阅读,更多相关《程序文档格式.docx(49页珍藏版)》请在冰豆网上搜索。
endl;
};
~num(){cout<
调用析构函数"
intget()const{returnn;
}
voidset(intx){n=x;
voidadd(){++n;
//operator++();
private:
intn;
intmain()
numi;
cout<
i="
i.get()<
i.add();
return0;
voidoperator++(){n=100;
i++;
numoperator++()
{
numt;
n++;
t.set(n);
returnt;
};
++i;
numf=++i;
f="
f.get()<
创建无名临时对象
无参调用构造函数"
num(inti){n=i;
有参调用构造函数"
returnnum(n);
n<
取消临时对象
return*this;
num(constnum&
s){n=s.n;
复制构造函数"
cout<
//用*this替换为num(n),用构造函数创建的临时对象来替换*this指针,它所指向的是原始对象
//用this对象来替换创建一个临时对象,这样返回的自加以后的原始对象,而不是不是临时对象,
//因此不用调用带有参数的构造函数,
numf;
f=++i;
//返回的是自加以后的原始对象,而不是临时对象,因此不用调用带有参数的构造函数
//将返回的原始对象赋给了新建的对象f,因此会调用复制构造函数来进行对象i到对象f成员X的复制
num(constnum&
s){this->
n=s.n;
s){cout<
n="
this->
为什么="
s.n<
this->
//因为不会改变,别名的值,因此将之改为const的变量
自增后的"
//为什么不返回成员变量执行的自加后的对象呢
//num(n)为构造函数创建的临时对象
//将之替换为this指针,他所指向原始对象
//没创建一个对象都要调用构造函数来为该对象开辟内存空间
//而销毁对象则要调用析构函数来释放内存
//每一次创建对象都要牺牲一定的内存空间和一定的速度
//而且我们要执行的也只是对象的成员变量,为什么我们不返回成员变量自加后的对象呢
s)
//返回的是自加以后的原始对象,而不是临时对象
numn=++i;
//将返回的原始对象赋给了新建的对象f
//因此会调用复制构造函数来执行对象i到对象n的成员值的复制
n.get()<
constnum&
operator++()
constnumoperator++(intq)
numtemp(*this);
returntemp;
numn=i++;
//将原始对象的值也就是成员拷贝到临时对象temp中,这一步可以调用复制构造函数来完成
//在为这个复制构造函数,我们要传递一个对象,这个对象是this对象,也就是原始对象
//这个this对象是operator++这个函数进行自加的当前对象,再将当前对象的数据拷贝到这个临时对象
//对this他的成员进行自加相当于this->
++n;
//返回临时对象
//因为返回的是一个临时对象,这个临时对象在超出作用域后就被析构掉了
//如果按引用的方式返回的话,则返回的是一个空的对象,
//那么要按值的方式返回呢
运算符重载的问题:
intoperator+();
与int&
operator+();
有什么区别?
2008-02-2912:
49提问者:
lin1270
|浏览次数:
1665次
问题补充:
能有具体的例子说明更好!
~~~如果换成Sampleoperator+();
与Sample&
opetator+();
呢?
其中Sample是类名...
满意回答
2008-02-2914:
07热心网友
intoperator+()这个表明这个是重载的+运算符,因为重载的操作符需要定义成非成员函数,一般都定义为友元
所以需要返回一个对象,而
int&
operator+()应该是内置的+操作符,它只要返回一个成员变量的引用即可
基本数据类型不能重载操作符,下面举个Item类的例子说明如下:
Itemoperator+(constItem&
left,constItem&
right)
{Itemtemp;
temp.data=left.data+right.data;
returntemp;
Item&
operator+(con