关于结构体的操作符重载和定义在内部的函数

来源:互联网 发布:docker安装windows 10 编辑:程序博客网 时间:2024/06/01 10:27

首先结构体和类是有相似的地方的,可以进行运算符重载。

下面以=为例,

#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;//输出:1return 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 0