首先结构体和类是有相似的地方的,可以进行运算符重载。
下面以=为例,
#include<iostream>
using namespace std;
struct P
{
int a;
int b;
//虽然已经对结构体进行=重载,但是这里只是举一个例子而已
P& operator=(P& temp)
{
a=temp.a;
b=temp.b;
return *this;
}
};
int main()
{
P p={1,2};
P x;
x=p;
cout<<x.a;//输出:1
return 0;
}
不过我也发现可以在结构体内写个构造函数等。。
#include<iostream>
using namespace std;
struct P
{
int a;
int b;
//P(){}
//P(int x,int y):a(x),b(y){}
P(int x=0,int y=0):a(x),b(y){}
void ShowAdd(){cout<<a+b<<endl;}
};
int main()
{
P temp;//right
//P p1={1,2};//error
P p2(1,2);//right
p.ShowAdd();//输出:3
cout<<p.a<<endl;//输出:1
return 0;
}
这样的话,结构体几乎就和类一样了。注意结构体中定义的变量和方法是public的。
这里要解释下下面这几句代码
//P(){}
//P(int x,int y):a(x),b(y){}
P(int x=0,int y=0):a(x),b(y){}
如果你写了第三行的代码,那就千万不要写第一第二行,为什么?放你编译器运行看看吧,这里只是提个醒,不作解释,很简单。
结构体运算符重载
1、定义结构体
struct
Currency
{
int
Dollar;
int
Cents;
}
|
2、重载IO输出操作,在结构体内部将输入操作的重载定义为友元函数重载
friend
ostream &operator<<(ostream &out,Currency value);
|
在结构体外部进行具体定义
ostream& operator<<(ostream &out,Currency value)
{
out<<
"The dollar = "
<<value.Dollar<<
" and The Cents = "
<<value.Cents<<endl;
return
out;
}
|
3、重载结构体的“=”操作符(在结构体内部)
Currency& operator=(Currency& value)
{
Dollar = value.Dollar;
Cents = value.Cents;
return
*
this
;
|