1、程序重载前置自加运算符#includeiostreamusing namespace std;class numpublic: num()n=1;cout调用构造函数endl; num()cout调用析构函数endl; int get()constreturn n; void set(int x)n=x; void add()+n; /operator+();private: int n;int main() num i; couti=i.get()endl; i.add(); couti=i.get()endl; return 0;#includeiostreamusing namespac
2、e std;class numpublic: num()n=1;cout调用构造函数endl; num()cout调用析构函数endl; int get()constreturn n; void set(int x)n=x; void add()+n; void operator+()n=100;private: int n;int main() num i; couti=i.get()endl; i.add(); couti=i.get()endl; i+; couti=i.get()endl; return 0;#includeiostreamusing namespace std;cla
3、ss numpublic: num()n=1;cout调用构造函数endl; num()cout调用析构函数endl; int get()constreturn n; void set(int x)n=x; void add()+n; num operator+() num t; n+; t.set(n); return t ; ;private: int n;int main() num i; couti=i.get()endl; i.add(); couti=i.get()endl; +i; couti=i.get()endl; num f=+i; coutf=f.get()endl; r
4、eturn 0;创建无名临时对象#includeiostreamusing namespace std;class numpublic: num()n=1;cout无参调用构造函数endl; num(int i)n=i;cout有参调用构造函数endl; num()cout调用析构函数endl; int get()constreturn n; void set(int x)n=x; void add()+n; num operator+() n+; return num(n); ;private: int n;int main() num i; couti=i.get()endl; i.add
5、(); couti=i.get()endl; +i; couti=i.get()endl; num f=+i; coutf=f.get()endl; return 0;#includeiostreamusing namespace std;class numpublic: num()n=1;cout无参调用构造函数endl; num(int i)n=i;cout有参调用构造函数nendl; num()cout调用析构函数endl; int get()constreturn n; void set(int x)n=x; void add()+n; num operator+() n+; retu
6、rn num(n); ;private: int n;int main() num i; couti=i.get()endl; num f=+i; coutf=f.get()endl; return 0;取消临时对象#includeiostreamusing namespace std;class numpublic: num()n=1;cout无参调用构造函数endl; num(int i)n=i;cout有参调用构造函数nendl; num()cout调用析构函数endl; int get()constreturn n; void set(int x)n=x; void add()+n;
7、num operator+() n+; return *this; ;private: int n;int main() num i; couti=i.get()endl; num f=+i; coutf=f.get()endl; return 0;#includeiostreamusing namespace std;class numpublic: num()n=1;cout无参调用构造函数endl; num(int i)n=i;cout有参调用构造函数nendl; num(const num &s)n=s.n;cout复制构造函数nendl; num()cout调用析构函数endl; i
8、nt get()constreturn n; void set(int x)n=x; void add()+n; num operator+() n+; coutnendl; return *this; /用*this替换为num(n),用构造函数创建的临时 对象来替换*this指针,它所指向的是原始对象 /用this对象来替换创建一个临时对象,这样返回的自加以后的原始对象,而不是不是临时对象, /因此不用调用带有参数的构造函数, ;private: int n;int main() num i; couti=i.get()endl; i.add(); couti=i.get()endl; n
9、um f; f=+i; coutf=f.get()endl; return 0;#includeiostreamusing namespace std;class numpublic: num()n=1;cout无参调用构造函数endl; num(int i)n=i;cout有参调用构造函数nendl; num(const num &s)n=s.n;cout复制构造函数nendl; num()cout调用析构函数endl; int get()constreturn n; void set(int x)n=x; void add()+n; num operator+() n+; coutnend
10、l; return *this; /用*this替换为num(n),用构造函数创建的临时 对象来替换*this指针,它所指向的是原始对象 /用this对象来替换创建一个临时对象,这样返回的自加以后的原始对象,而不是不是临时对象, /因此不用调用带有参数的构造函数, /返回的是自加以后的原始对象,而不是临时对象,因此不用调用带有参数的构造函数 ;private: int n;int main() num i; couti=i.get()endl; i.add(); couti=i.get()endl; num f=+i; /将返回的原始对象赋给了新建的对象f,因此会调用复制构造函数来进行对象i到
11、对象f成员X的复制 coutf=f.get()endl; return 0;#includeiostreamusing namespace std;class numpublic: num()n=1;cout无参调用构造函数endl; num(int i)n=i;cout有参调用构造函数nendl; num(const num &s)n=s.n;cout复制构造函数endl; num()cout调用析构函数endl; int get()constreturn n; void set(int x)n=x; void add()+n; num operator+() n+; coutnendl;
12、return *this; /用*this替换为num(n),用构造函数创建的临时 对象来替换*this指针,它所指向的是原始对象 /用this对象来替换创建一个临时对象,这样返回的自加以后的原始对象,而不是不是临时对象, /因此不用调用带有参数的构造函数, /返回的是自加以后的原始对象,而不是临时对象,因此不用调用带有参数的构造函数 ;private: int n;int main() num i; couti=i.get()endl; i.add(); couti=i.get()endl; num f; f=+i; /将返回的原始对象赋给了新建的对象f,因此会调用复制构造函数来进行对象i到
13、对象f成员X的复制 coutf=f.get()endl; return 0;#includeiostreamusing namespace std;class numpublic: num()n=1;cout无参调用构造函数endl; num(int i)n=i;cout有参调用构造函数nn=s.n;cout复制构造函数endl; num()cout调用析构函数endl; int get()constreturn n; void set(int x)n=x; void add()+n; num operator+() n+; return *this; ;private: int n;int
14、main() num i; couti=i.get()endl; num f=+i; coutf=f.get()endl; return 0;#includeiostreamusing namespace std;class numpublic: num()n=1;cout无参调用构造函数endl; num(int i)n=i;cout有参调用构造函数nendl; num(const num&s)coutn=nendl; cout为什么=s.nn=s.n;cout复制构造函数endl; /因为不会改变,别名的值,因此将之改为const的变量 num()cout调用析构函数endl; int g
15、et()constreturn n; void set(int x)n=x; void add()+n; num operator+() n+; cout自增后的n=nendl; return *this; /为什么不返回成员变量执行的自加后的对象呢 /num(n)为构造函数创建的临时对象 /将之替换为this指针,他所指向原始对象 ;private: int n;int main() num i; /没创建一个对象都要调用构造函数来为该对象开辟内存空间 /而销毁对象则要调用析构函数来释放内存 /每一次创建对象都要牺牲一定的内存空间和一定的速度 /而且我们要执行的也只是对象的成员变量,为什么我
16、们不返回成员变量自加后的对象呢 couti=i.get()endl; num f=+i; coutf=f.get()endl; return 0;#includeiostreamusing namespace std;class numpublic: num()n=1;cout无参调用构造函数endl; num(int i)n=i;cout有参调用构造函数nn=s.n;cout复制构造函数endl; ; /因为不会改变,别名的值,因此将之改为const的变量 num()cout调用析构函数endl; int get()constreturn n; void set(int x)n=x; voi
17、d add()+n; num operator+() n+; return *this; /为什么不返回成员变量执行的自加后的对象呢 /num(n)为构造函数创建的临时对象 /将之替换为this指针,他所指向原始对象 /返回的是自加以后的原始对象,而不是临时对象 ;private: int n;int main() num i; /没创建一个对象都要调用构造函数来为该对象开辟内存空间 /而销毁对象则要调用析构函数来释放内存 /每一次创建对象都要牺牲一定的内存空间和一定的速度 /而且我们要执行的也只是对象的成员变量,为什么我们不返回成员变量自加后的对象呢 couti=i.get()endl; n
18、um n=+i; /将返回的原始对象赋给了新建的对象f /因此会调用复制构造函数来执行对象i到对象n的成员值的复制 coutn=n.get()endl; return 0;#includeiostreamusing namespace std;class numpublic: num()n=1;cout无参调用构造函数endl; num(int i)n=i;cout有参调用构造函数nn=s.n;cout复制构造函数endl; ; num()cout调用析构函数endl; int get()constreturn n; void set(int x)n=x; void add()+n; cons
19、t num &operator+() n+; return *this; ; const num operator+(int q) num temp(*this); n+; return temp; ;private: int n;int main() num i; couti=i.get()endl; i.add(); couti=i.get()endl; num n=i+; couti=i.get()endl; coutn=n.get()endl; return 0;#includeiostreamusing namespace std;class numpublic: num()n=1;
20、cout无参调用构造函数endl; num(int i)n=i;cout有参调用构造函数nn=s.n;cout复制构造函数endl; ; num()cout调用析构函数+n; return temp; /返回临时对象 /因为返回的是一个临时对象,这个临时对象在超出作用域后就被析构掉了 /如果按引用的方式返回的话,则返回的是一个空的对象, /那么要按值的方式返回呢 ;private: int n;int main() num i; couti=i.get()endl; i.add(); couti=i.get()endl; num n=i+; couti=i.get()endl; coutn=n
21、.get()endl; return 0;#includeiostreamusing namespace std;class numpublic: num()n=1;cout无参调用构造函数endl; num(int i)n=i;cout有参调用构造函数nn=s.n;cout复制构造函数endl; ; /因为不会改变,别名的值,因此将之改为const的变量 num()cout调用析构函数endl; int get()constreturn n; void set(int x)n=x; void add()+n; const num &operator+() n+; return *this;
22、/为什么不返回成员变量执行的自加后的对象呢 /num(n)为构造函数创建的临时对象 /将之替换为this指针,他所指向原始对象 /返回的是自加以后的原始对象,而不是临时对象 ;private: int n;int main() num i; /没创建一个对象都要调用构造函数来为该对象开辟内存空间 /而销毁对象则要调用析构函数来释放内存 /每一次创建对象都要牺牲一定的内存空间和一定的速度 /而且我们要执行的也只是对象的成员变量,为什么我们不返回成员变量自加后的对象呢 couti=i.get()endl; num n=+i; /将返回的原始对象赋给了新建的对象f /因此会调用复制构造函数来执行对象
23、i到对象n的成员值的复制 coutn=n.get()endl; return 0;运算符重载的问题:int operator+();与int &operator+();有什么区别?2008-02-29 12:49提问者:lin1270|浏览次数:1665次问题补充:能有具体的例子说明更好!如果换成Sample operator+();与Sample &opetator+();呢?其中Sample是类名.满意回答2008-02-29 14:07热心网友int operator+()这个表明这个是重载的+运算符,因为重载的操作符需要定义成非成员函数,一般都定义为友元所以需要返回一个对象,而int& operator+()应该是内置的+操作符,它只要返回一个成员变量的引用即可基本数据类型不能重载操作符,下面举个Item类的例子说明如下:Item operator+(const Item &left, const Item &right) Item temp;temp.data = left.data + right.data;return temp;Item& operator+(con
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1