帮忙分析一下两个C++小程序

来源:百度知道 编辑:UC知道 时间:2024/05/29 13:46:04
1.源程序如下:
#include <iostream.h>
class Data
{
public:
~Data()
{cout<<x<<','<<y<<endl;}
Data(int i=0,int j=0)
{x=i; y=j;}
void operator+=(Data& obj)
{this->x+=obj.x; this->y+=obj.y;}
Data& operator()(int i,int j)
{this->x+=i; this->y+=j; return *this;}
Data& operator+(Data& obj)
{this->x+=obj.x; this->y+=obj.y; return *this;}
private:
int x,y;
};
void main()
{
Data obj1(2,4);
Data obj2;
obj2+=obj1;
obj2+=Data(2,3);
obj2=obj1+obj2;
}
请分析一下程序的运行结果。
2.源程序如下:
#include <iostream.h>
class Node
{
public:
int val;
Node* next;
};
void insert(Node* list,int x)
{
Node *u,*v,*p;
u=list;
v=u->next;
while(v!=NULL&&x<v->val)
{u=v; v=v->next;}
if(v==NULL||x>v->val)
{p=new Node; p->val=x; p->next=v; u->next

详细说明了
两个程序都有冗余,第二个有错

#include <iostream.h>
class Data
{
public:
~Data()
{cout<<x<<','<<y<<endl;}
Data(int i=0,int j=0)
{x=i; y=j;}
void operator+=(Data& obj)
{this->x+=obj.x; this->y+=obj.y;}
Data& operator()(int i,int j) //可以尝试注释掉本重载声明,不影响
{this->x+=i; this->y+=j; return *this;}
Data& operator+(Data& obj)
{this->x+=obj.x; this->y+=obj.y; return *this;}
private:
int x,y;
};
void main()
{
Data obj1(2,4);
Data obj2;
obj2+=obj1; //本句后obj2为(2,4)
/*Data(2,3),生成了一个临时Data类,本句过后立刻析构,在屏幕上输出这个临时量的x,y.可以尝试在本句后cout<<endl;可以看见2,3会与后面两个隔开一行*/
obj2+=Data(2,3); //本句后obj2为(4,7)
/*obj1调用+重载运算符,可以看见+修改了调用他的类本身数据,并返回该类本身.这种用法和传统的用法不同,但功能相当于:int obj1=1,obj2=2;obj1+=obj2;obj2=obj1;的后面两句*/
obj2=obj1+obj2; //本句中先是obj1被修改为(6,11),再利用默认的赋值拷贝附=,令obj2=obj1,即obj2也为(6,11)
/*先析构obj2,再