#include<iostream.h>
//using namespace std;
class Tpoint{
private:int x,y;
public:
/*Tpoint(){
x=1;
y=1;
cout<<"default constructor"<<endl;
}*/
Tpoint(int a=0,int b=0){
x=a;y=b;
cout<<"constructor,x="<<x<<"y="<<y<<endl;
}
Tpoint(const Tpoint&c ) {
x = c.x;
y = c.y;
cout<<"copy constructor,x="<<x<<"y="<<y<<endl;
}
~Tpoint(){
cout<<"delete,x="<<x<<"y="<<y<<endl;
}
Tpoint operator+(const Tpoint& p){
Tpoint temp;
temp.x=x+p.x;
temp.y=y+p.y;
return temp;
}
Tpoint operator++(int){
Tpoint before(x,y);
x++;
y++;
return before;
}
Tpoint operator++(){
x++;
y++;
return *this;
}
bool operator==(const Tpoint& p){
if((x==p.x)&&(y==p.y))
return 1;
else
return 0;
}
friend Tpoint operator-(Tpoint &p,Tpoint &q);
friend Tpoint operator--(Tpoint &p);
friend Tpoint operator--(Tpoint &p,int);
friend ostream& operator<<(ostream &out,Tpoint &p);
friend istream operator>>(istream &in,Tpoint &p);
};
Tpoint operator-(Tpoint &p,Tpoint &q)
{
Tpoint temp;
temp.x=p.x-q.x;
temp.y=p.y-q.y;
return temp;
}
Tpoint operator--(Tpoint &p)
{
p.x--;
p.y--;
return p;
}
Tpoint operator--(Tpoint &p,int)
{
Tpoint before(p.x,p.y);
p.x--;
p.y--;
return before;
}
ostream& operator<<(ostream &out,Tpoint &p)
{
out<<"("<<p.x<<","<<p.y<<")"<<endl;
return out;
}
void main(){
Tpoint p1(1,1),p2(3);
Tpoint p3=p1+p2;
cout<<(p1==p2)<<endl;
cout<<p1<<endl;
++p1;
--p1;
Tpoint p4=p1-p2;
}
求大神。内容:C++程序设计:运算符重载
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答
- BuXianShan 2019-05-09 21:06关注
重载为成员函数和友元函数的区别:成员函数有this指针,友元函数没有this指针。成员函数可以继承,友元函数不能继承。
为什么<<和>>运算符只能重载为友元函数:因为定义为成员函数,就隐含this指针作为第一个参数。而调用<<和>>的
对象是cin或cout,所以把它重载为友元才好。调整了你的代码格式
#include<iostream> using namespace std; class Tpoint{ private: int x,y; public: /*Tpoint(){ x=1; y=1; cout<<"default constructor"<<endl; }*/ Tpoint(int a=0,int b=0){ x=a;y=b; cout<<"constructor,x="<<x<<"y="<<y<<endl; } Tpoint(const Tpoint&c ) { x = c.x; y = c.y; cout<<"copy constructor,x="<<x<<"y="<<y<<endl; } ~Tpoint(){ cout<<"delete,x="<<x<<"y="<<y<<endl; } Tpoint operator + (const Tpoint& p){ Tpoint temp; temp.x=x+p.x; temp.y=y+p.y; return temp; } Tpoint operator ++ (int){ Tpoint before(x,y); x++; y++; return before; } Tpoint operator ++ (){ x++; y++; return *this; } bool operator == (const Tpoint& p){ if((x==p.x)&&(y==p.y)) return 1; else return 0; } friend Tpoint operator-(Tpoint &p,Tpoint &q); friend Tpoint operator--(Tpoint &p); friend Tpoint operator--(Tpoint &p,int); friend ostream& operator<<(ostream &out,Tpoint &p); friend istream operator>>(istream &in,Tpoint &p); }; Tpoint operator-(Tpoint &p,Tpoint &q) { Tpoint temp; temp.x=p.x-q.x; temp.y=p.y-q.y; return temp; } Tpoint operator--(Tpoint &p) { p.x--; p.y--; return p; } Tpoint operator--(Tpoint &p,int) { Tpoint before(p.x,p.y); p.x--; p.y--; return before; } ostream& operator<<(ostream &out,Tpoint &p) { out<<"("<<p.x<<","<<p.y<<")"<<endl; return out; } int main(){ Tpoint p1(1,1),p2(3); Tpoint p3=p1+p2; cout<<(p1==p2)<<endl; cout<<p1<<endl; ++p1; --p1; Tpoint p4=p1-p2; return 0; }
解决 无用评论 打赏 举报
悬赏问题
- ¥15 c程序不知道为什么得不到结果
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置