关于结构体的操作符重载和定义在内部的函数
2015-09-03 21:19
169 查看
首先结构体和类是有相似的地方的,可以进行运算符重载。
下面以=为例,
不过我也发现可以在结构体内写个构造函数等。。
这样的话,结构体几乎就和类一样了。注意结构体中定义的变量和方法是public的。
这里要解释下下面这几句代码:
下面以=为例,
#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){}如果你写了第三行的代码,那就千万不要写第一第二行,为什么?放你编译器运行看看吧,这里只是提个醒,不作解释,很简单。
相关文章推荐
- 继承中的构造方法
- Python
- 函数指针数组
- AJAX学习笔记
- newssoj1004逐个击破attack(排序+并查集)
- jQuery基础学习4——jQuery容错性
- 背包问题
- 蓝懿-打飞机图片,内存管理基础 刘国斌老师
- poj 2155 Matrix(二维树状数组)
- C++模板类编写需要注意的一点
- [转]在Ubuntu中安装Python科学计算环境
- [转载]Qt之中文显示(QMessageBox、QLineEdit右键菜单等)
- 蓝汛ChinaCache助力大阅兵全球直播
- 运用Polygon类绘制六边形
- UVALive 7043 International Collegiate Routing Contest 字典树
- 详解SVN提交更新七大准则
- 实现ArcGIS水文分析计算汇流累积量功能
- (*(void(*) ())0)()------这是什么?
- Android设备的唯一标识
- Android屏幕分辨率与dip、sp、pt、px等区别